1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
int main(int argc, const char *argv[])
{
char *cmd1[] = {"/bin/cat", NULL};
char *cmd2[] = {"/bin/cat", NULL};
char *cmd3[] = {"/bin/ls", NULL};
int p1[2];
int p2[2];
pipe(p1);
if (fork() == 0)
{
close(p1[0]);
dup2(p1[1], 1);
execve(cmd1[0], cmd1, NULL);
exit(0);
}
pipe(p2);
if (fork() == 0)
{
close(p1[1]);
dup2(p1[0], 0);
close(p2[0]);
dup2(p2[1], 1);
execve(cmd2[0], cmd2, NULL);
exit(0);
}
close(p1[0]);
close(p1[1]);
if (fork() == 0)
{
close(p2[1]);
dup2(p2[0], 0);
execve(cmd3[0], cmd3, NULL);
exit(0);
}
close(p2[0]);
close(p2[1]);
while (wait(NULL) != -1)
;
printf("END OF PROGRAM\n");
return 0;
} |