tp2_7.c 1.32 KB
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>


int main(int argc, char * argv[]){
    int fils1, fils2;
    int tube[2];
    if(pipe(tube)<0){
        perror("erreur pipe");
        exit(1);
    }
    
    if((fils1=fork())<0){
        perror("erreur exec du fork");
        exit(1);
    }
    if(fils1 == 0){
        close(tube[0]); //fils 1 ne lit pas 
        dup2(tube[1],1);
        if(execlp("cat","cat","/etc/passwd",NULL)==-1){
            perror("echec execlp");
            exit(1);
        }
    } else {
        if((fils2=fork())<0){
            perror("erreur exec du fork");
            exit(1);
        }
        if(fils2 == 0){
            close(tube[1]); //fils 2 n'écrit pas
            dup2(tube[0],0);
            if(execlp("wc","ws",NULL)==-1){
                perror("echec execlp");
                exit(1);
            }
            
        } else{
            int r, pid;
                
            close(tube[1]);
            close(tube[0]);
           
            if((pid= wait(&r)) <0){
                perror("erreur exec du wait");
                exit(1);
            }
            if((pid= wait(&r)) <0){
                perror("erreur exec du wait");
                exit(1);
            }
            printf("\nDans le père, traitement fini\n");
        }
    }
    return 0;
}