master
Philippe Pittoli 2011-10-27 18:25:05 +02:00
parent a7ea5df855
commit cfa25ea7bf
1 changed files with 43 additions and 43 deletions

View File

@ -11,49 +11,49 @@
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int p[2],pid; int p[2],pid;
if(argc < 2) if(argc < 2)
{ {
perror("erreur argument"); perror("erreur argument");
exit(-1); exit(-1);
} }
if(pipe(p) == -1) if(pipe(p) == -1)
{ {
perror("erreur creation tube "); perror("erreur creation tube ");
exit(-2); exit(-2);
} }
pid=fork(); // creation du proc. fils pid=fork(); // creation du proc. fils
switch(pid ) switch(pid )
{ {
case -1: case -1:
perror("fork1"); perror("fork1");
exit(-3); exit(-3);
break; break;
case 0 : // le fils traite la commande case 0 : // le fils traite la commande
close(1); close(1);
dup(p[1]); // on recupere forcement le desc. 1 (+ petit possible) dup(p[1]); // on recupere forcement le desc. 1 (+ petit possible)
close(p[0]); close(p[0]);
close(p[1]); close(p[1]);
execvp(argv[1],argv+1); execvp(argv[1],argv+1);
printf("\n*** erreur exec. impossible!"); printf("\n*** erreur exec. impossible!");
exit(-4); exit(-4);
default: // le pere fait le "more" default: // le pere fait le "more"
close(0); // on ferme entree standard close(0); // on ferme entree standard
dup(p[0]); // on connecte l'entree standard au tube dup(p[0]); // on connecte l'entree standard au tube
close(p[0]); // pour blocage en lecture close(p[0]); // pour blocage en lecture
close(p[1]); close(p[1]);
execlp("more","more",0); // si on saisit More par exemple -> message erreur execlp("more","more",0); // si on saisit More par exemple -> message erreur
printf("\nerreur execution more \n"); printf("\nerreur execution more \n");
exit(-5); exit(-5);
} }
exit(0); // on ne vient jamais ici exit(0); // on ne vient jamais ici
} }