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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "../my.h"
#define PIPEFD_READ 0
#define PIPEFD_WRITE 1
void fils1(int pipefd1[]);
void fils2(int pipefd2[]);
void fils3(int pipefd3[]);
void pere1(int pipefd1[]);
void pere2(int pipefd2[]);
void pere3(int pipefd3[]);
void fils1(int pipefd1[])
{
xclose(pipefd1[PIPEFD_READ]);
xdup2(pipefd1[PIPEFD_WRITE], STDOUT_FILENO);
execlp("/bin/ls", "ls", "-la", 0);
}
void pere1(int pipefd1[])
{
int pipefd2[2];
int pid;
xclose(pipefd1[PIPEFD_WRITE]);
xdup2(pipefd1[PIPEFD_READ], STDIN_FILENO);
xpipe(pipefd2);
pid = xfork();
if (pid == 0)
fils2(pipefd2);
else
pere2(pipefd2);
}
void fils2(int pipefd2[])
{
xclose(pipefd2[PIPEFD_READ]);
xdup2(pipefd2[PIPEFD_WRITE], STDOUT_FILENO);
execlp("/bin/cat", "cat", "-e", 0);
}
void pere2(int pipefd2[])
{
int pipefd3[2];
int pid;
xclose(pipefd2[PIPEFD_WRITE]);
xdup2(pipefd2[PIPEFD_READ], STDIN_FILENO);
xpipe(pipefd3);
pid = xfork();
if (pid == 0)
fils3(pipefd3);
else
pere3(pipefd3);
}
void fils3(int pipefd3[])
{
xclose(pipefd3[PIPEFD_READ]);
xdup2(pipefd3[PIPEFD_WRITE], STDOUT_FILENO);
execlp("/bin/grep", "grep", "test", 0);
}
void pere3(int pipefd3[])
{
xclose(pipefd3[PIPEFD_WRITE]);
xdup2(pipefd3[PIPEFD_READ], STDIN_FILENO);
execlp("/bin/cat", "cat", "-b", 0);
}
int main(void)
{
int pipefd1[2];
int pid;
xpipe(pipefd1);
pid = xfork();
if (pid == 0)
fils1(pipefd1);
else
pere1(pipefd1);
return (EXIT_SUCCESS);
} |
Partager