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
| #include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h> /* CORRECTION : include manquant comme l'a fait judicieusement remarqué Neckara */
int main(void){ /* CORRECTION : une fonction sans paramètre doit, en toute rigueur, mettre void entre parenthèse pour indiquer au compilateur qu'elle ne prend pas de paramètres */
char buf[256];
int pid;
int status;
printf("%%"); /* imprimer un prompt % */
while(fgets(buf,256,0)!= NULL){
buf[strlen(buf)-1]=0;
/* erreur de fork */
if((pid==fork())<0) {
printf("Erreur de fork()");
exit(127);
/* CORRECTION : break; => ne sert à rien */
}else if (pid == 0){ /* Processus Fils */
execlp(buf,buf,(char *)0);
printf("%s n a pu etre executée\n",); /* CORRECTION : Oh une virgule qui se balade toute seule, d'où l'erreur ;) */
exit(127);
}
/* CORRECTION : Dans la logique des choses, on met un else if ici */
if ((pid==waitpid(pid,&status, 0))<0){ /* Processus Père */
printf("erreur dans wait\n");
Exit(127); /* Avec une majuscule ??? */
}
printf("%%");
}
/* CORRECTION exit(0); => pourquoi exit ici, quand on peux retourner une valeur correspondant à la signature de main() ??? */
return EXIT_SUCCESS;
} |
Partager