#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