Advertisement
arczi316

SO_LAB9_grA

Dec 28th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/stat.h>
  4.  
  5. #define FIFO "sync"
  6. #define RESULT "result.txt"
  7. #define READ 0
  8. #define WRITE 1
  9.  
  10. int silnia(int x)
  11. {
  12.     if (x <= 1)
  13.         return 1;
  14.  
  15.     return x * silnia(x - 1);
  16. }
  17.  
  18. int main()
  19. {
  20.     printf("Dopisywac do pliku? y/n: ");
  21.     int c = getchar();
  22.  
  23.     int pipedes[2];
  24.     pipe(pipedes);
  25.  
  26.     umask(0);
  27.     mkfifo(FIFO, 0666);
  28.  
  29.     if (!fork())
  30.     {
  31.         close(pipedes[WRITE]);
  32.  
  33.         while (1)
  34.         {
  35.             int x;
  36.             read(pipedes[READ], &x, sizeof(x));
  37.  
  38.             int result = silnia(x);
  39.  
  40.             FILE *f = fopen(FIFO, "w");
  41.             fprintf(f, "%d", result);
  42.             fclose(f);
  43.         }
  44.     }
  45.  
  46.     if (!fork())
  47.     {
  48.         while (1)
  49.         {
  50.             int x;
  51.             FILE *fifo = fopen(FIFO, "r");
  52.             fscanf(fifo, "%d", &x);
  53.             fclose(fifo);
  54.  
  55.             printf("Wynik: %d\n", x);
  56.  
  57.             if (c == 'y') {
  58.                 FILE *f = fopen(RESULT, "a");
  59.                 fprintf(f, "%d\n", x);
  60.                 fclose(f);
  61.             }
  62.         }
  63.     }
  64.  
  65.     close(pipedes[READ]);
  66.  
  67.     while (1)
  68.     {
  69.         int x;
  70.         scanf("%d", &x);
  71.         write(pipedes[WRITE], &x, sizeof(x));
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement