candale icon

Pipe with sum until negative number

candale | PRO | 06/11/13 10:07:46 AM UTC | 0 ⭐ | 198 👁️ | Never ⏰ | []
C |

1.17 KB

|

None

|

0 👍

/

0 👎

#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
 
int fdTS[2], fdTC[2];
 
void pDie(int p)
{
    close(fdTS[0]);
    close(fdTS[1]);
    close(fdTC[0]);
    close(fdTC[1]);
    printf("\nBye Now\n");
    exit(0);
}
 
void chDie(int p)
{
    wait(0);
    signal(SIGCHLD, chDie);
}
int main()
{
    int ch;
    signal(SIGINT, pDie);
    signal(SIGCHLD, chDie);
    
    pipe(fdTS);
    pipe(fdTC);
    
    while(1)
    {
        ch = fork();
        if(ch == 0)
        {   
            printf("   ---- New child ----  \n");
            int ok = 1;
            while(ok)
            {
                int c;
                printf("Enter number:");
                scanf("%d", &c);
                write(fdTS[1], &c, sizeof(int));
                read(fdTC[0], &ok, sizeof(int));
            }
            int sum;
            read(fdTC[0], &sum, sizeof(int));
            printf("Sum: %d\n", sum);
            exit(0);
        }
        else if( ch  >  0)
        {   
            int numb = 0, sum = 0;
            do {
                sum = sum + numb;
                read(fdTS[0], &numb, sizeof(int));
                if(numb > 0)
                {
                    int ok = 1;
                    write(fdTC[1], &ok, sizeof(int));
                }
 
            }while(numb > 0);
            int ok = 0;
            write(fdTC[1], &ok, sizeof(int));
            write(fdTC[1], &sum, sizeof(int));
        }
    }
}

Comments