Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <signal.h>
  4. #include <unistd.h>
  5.  
  6. // классический пинг-понг между отцом и сыном с сигналами
  7.  
  8. enum { BASE = 10 };
  9.  
  10. int fd[2];
  11. FILE *frd;
  12. FILE *fwr;
  13. int nom;
  14. int max;
  15.  
  16. void handler(int s)
  17. {
  18. int pid;
  19. int x;
  20. //if (!pid) pid = getppid();
  21. //read(fd[0], &x, sizeof(x));
  22. fscanf(frd, "%d%d", &x, &pid);
  23. printf("%d %d\n", nom, x);
  24. fflush(stdout);
  25. x++;
  26. //nom++;
  27. //write(fd[1], &x, sizeof(x));
  28. if (x >= max) {
  29. exit(0);
  30. }
  31. fprintf(fwr, "%d % d\n", x, getpid());
  32. fflush(fwr);
  33. kill(pid, SIGUSR1);
  34. }
  35.  
  36. int main(int argc, char *argv[])
  37. {
  38. pipe(fd);
  39. signal(SIGUSR1, handler);
  40. //max = (int)strtol(argv[1], NULL, BASE);
  41. max = 15;
  42. frd = fdopen(fd[0], "r");
  43. fwr = fdopen(fd[1], "w");
  44. int pid1;
  45. pid1 = fork();
  46. if (!pid1) {
  47. //pid1 = getppid();
  48. nom = 1;
  49. while (1) { pause(); }
  50.  
  51. }
  52. int pid2;
  53. pid2 = fork();
  54. if (!pid2) {
  55. //pid2 = getppid();
  56. nom = 2;
  57. while (1) { pause(); }
  58.  
  59. }
  60. int z = 1;
  61. //write(fd[1], &z, sizeof(z));
  62. fprintf(fwr, "%d %d\n", z, pid1);
  63. kill(pid1, SIGUSR1);
  64. wait(NULL);
  65. printf("Done\n");
  66. kill(pid1, SIGKILL);
  67. kill(pid2, SIGKILL);
  68. fclose(fwr);
  69. fclose(frd)
  70. //while (1) { pause(); }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement