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
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#define _MAX_ 2
#define _WRITE_ 1
#define _READS_ 0
int main( void ){
int i_Flag = 0;
int i_Tube[_MAX_];
if( pipe(i_Tube) ){
perror("Erreur tube\n");
}
i_Flag = fork();
switch( i_Flag ){
/* Erreur */
case -1:
perror("Erreur Process\n");
exit( EXIT_FAILURE );
/* Fils */
case 0:
close( STDOUT_FILENO );
if( (-1) == dup( i_Tube[_WRITE_] ) ){
perror("Erreur Dup (1)");
exit( EXIT_FAILURE );
}
close( i_Tube[_WRITE_] );
close( i_Tube[_READS_] );
execlp( "ls", "ls", "-la", NULL);
break;
/* Père */
default:
close( STDIN_FILENO );
if( (-1) == dup( i_Tube[_READS_] ) ){
perror("Erreur Dup (2) \n");
exit( EXIT_FAILURE );
}
close( i_Tube[_READS_] );
close( i_Tube[_WRITE_] );
execlp( "uname", "uname", "-a", NULL);
}
return( EXIT_SUCCESS );
} |