#include #include #include #include #include #include int main () { int p[2]; int pid1, pid2, pid3, ret; int fd1, fd2 ; char c; fd1 = open("locate.database", O_RDWR | O_CREAT | O_TRUNC, 0777 ); // erreur d'ouverture if((fd1 == -1))//||(fd2 == -1)) { perror("ouverture impossible"); exit(-1); } if(pipe (p)<0) exit(-1); if((pid1 = fork())<0) exit(-2); if(pid1 == 0) // fils1 { close(p[0]); //fermeture du tube de lecture dup2(p[1],1); // duplication du tube d'ecriture dans la sortie standard close(p[1]); // fermeture du tube d'ecriture printf("ls -al\n"); execl("/bin/ls", "ls", "-al", "/bin", NULL); //execution de la commande ls -al /bin } else { if((pid2 = fork())<0) exit(-3); if(pid2 == 0) //fils2 { dup2(p[0], 1 ); //duplication du tube de lecture dans la sortie standard close(p[0]); //fermeture du tube de lecture close(p[1]); //fermeture du tube d'ecriture printf("grep\n"); execl("/bin/grep", "grep", "rwxrwxrwx", NULL); //execution de grep pour extraire les lignes contenant tous les droits exit(-1); } else { if((pid3 = fork())<0) exit(-3); if(pid3 == 0) //fils3 { while(read(1, &c, 1)>0) { write(fd1, &c, 1); } close(p[0]); close(p[1]); printf("ecriture dans locate.database\n"); } else { close(p[0]); close(p[1]); close(fd1); // close(fd2); wait(&ret); wait(&ret); wait(&ret); exit(0); } } } }