Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <fcntl.h>
  4. #include <stdlib.h>
  5. int fd, pid1, pid2, pid3;
  6. FILE *file;
  7. char arr[20];
  8. int N = 10;
  9. int finishedCount = 0;
  10.  
  11.  
  12. void process1_write(int signum)
  13. {
  14.     printf ("Child 1 write to file, pid = %d\n", getpid());
  15.     for (int i = 0; i < N; ++i)
  16.     {
  17.         printf("c1: %d\n", write(fd, "A", 1));
  18.     }
  19.     printf("Child 1 finished\n" );
  20.     kill(pid1, SIGUSR1);
  21. }
  22.  
  23.  
  24. void process2_write(int signum)
  25. {
  26.     printf ("Child 2 write to file, pid = %d\n", getpid());
  27.     for (int i = 0; i < N; ++i)
  28.     {
  29.         printf("c2: %d\n", write(fd, "B", 1));
  30.     }
  31.     printf("Child 2 finished\n" );
  32.     kill(pid1, SIGUSR1);
  33. }
  34.  
  35. void process_main_result(int signum)
  36. {
  37.         finishedCount++;
  38.         printf("Finished:  %d \n",finishedCount);
  39.    
  40.     if (finishedCount == 2)
  41.     {
  42.         file = fopen("res.txt", "r");
  43.         fgets(arr, N*3, file);
  44.         printf("Result:  %s \n",arr);
  45.         kill(pid2, SIGKILL);
  46.         kill(pid3, SIGKILL);
  47.         kill(pid1, SIGKILL);
  48.     }
  49. }
  50.  
  51.  
  52. int main()
  53. {
  54.  
  55.     pid1 = getpid();
  56.     fd = open("res.txt", O_CREAT | O_RDWR | O_TRUNC, 0666);
  57.     printf("Введите количество байт:\n");
  58.     scanf("%d",&N);
  59.    
  60.     signal(SIGUSR1, process1_write);
  61.      
  62.     pid2 = fork();
  63.     if (pid2 != 0)
  64.     {
  65.         pid3 = fork();
  66.     }
  67.     if (pid2 == 0)
  68.     {
  69.      
  70.         printf ("Child 1, pid = %d\n", getpid());
  71.          
  72.         signal(SIGUSR1, process1_write);
  73.         for(;;);
  74.     }
  75.     else if (pid3 == 0)
  76.     {
  77.      
  78.         printf ("Child 2, pid = %d\n", getpid());
  79.          
  80.         signal(SIGUSR1, process2_write);
  81.         for(;;);
  82.     }
  83.     else
  84.     {
  85.         signal(SIGUSR1, process_main_result);
  86.         sleep(5);
  87.         kill(pid2, SIGUSR1);
  88.         sleep(5);
  89.         kill(pid3, SIGUSR1);
  90.         for(;;);
  91.     }    
  92.              
  93.        
  94.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement