Advertisement
candale

Pipe with sum until negative number

Jun 11th, 2013
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/wait.h>
  3. #include <signal.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #include <unistd.h>
  8.  
  9. int fdTS[2], fdTC[2];
  10.  
  11. void pDie(int p)
  12. {
  13.     close(fdTS[0]);
  14.     close(fdTS[1]);
  15.     close(fdTC[0]);
  16.     close(fdTC[1]);
  17.     printf("\nBye Now\n");
  18.     exit(0);
  19. }
  20.  
  21. void chDie(int p)
  22. {
  23.     wait(0);
  24.     signal(SIGCHLD, chDie);
  25. }
  26. int main()
  27. {
  28.     int ch;
  29.     signal(SIGINT, pDie);
  30.     signal(SIGCHLD, chDie);
  31.    
  32.     pipe(fdTS);
  33.     pipe(fdTC);
  34.    
  35.     while(1)
  36.     {
  37.         ch = fork();
  38.         if(ch == 0)
  39.         {  
  40.             printf("   ---- New child ----  \n");
  41.             int ok = 1;
  42.             while(ok)
  43.             {
  44.                 int c;
  45.                 printf("Enter number:");
  46.                 scanf("%d", &c);
  47.                 write(fdTS[1], &c, sizeof(int));
  48.                 read(fdTC[0], &ok, sizeof(int));
  49.             }
  50.             int sum;
  51.             read(fdTC[0], &sum, sizeof(int));
  52.             printf("Sum: %d\n", sum);
  53.             exit(0);
  54.         }
  55.         else if( ch  >  0)
  56.         {  
  57.             int numb = 0, sum = 0;
  58.             do {
  59.                 sum = sum + numb;
  60.                 read(fdTS[0], &numb, sizeof(int));
  61.                 if(numb > 0)
  62.                 {
  63.                     int ok = 1;
  64.                     write(fdTC[1], &ok, sizeof(int));
  65.                 }
  66.  
  67.             }while(numb > 0);
  68.             int ok = 0;
  69.             write(fdTC[1], &ok, sizeof(int));
  70.             write(fdTC[1], &sum, sizeof(int));
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement