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 45 46 47 48 49 50 51 52 53 54 55 56
|
int forkage(char **tab, int i, int *pipefd)
{
int fd[2];
if (fork() == 0)
{
// fils
if (i < 3)
{
close(pipefd[1]);
dup2(pipefd[0] , 0);
pipe(fd);
forkage(tab, (i + 1), fd);
}
close(fd[0]);
dup2(fd[0], 0);
execlp(tab[i], tab[i + 3], tab[i + 6], 0);
}
else
{
//pere
wait(NULL);
}
}
int spipe()
{
int pipefd[2];
int nb_pipe = 2;
char *tab[9];
int i;
tab[0] = "/bin/ls";
tab[1] = "/bin/grep";
tab[2] = "/bin/grep";
tab[3] = "ls";
tab[4] = "grep";
tab[5] = "grep";
tab[6] = NULL;
tab[7] = "c";
tab[8] = "dup";
i = 0;
pipe(pipefd);
forkage(tab, i, pipefd);
}
int main()
{
spipe();
return (0);
} |
Partager