à propos d'un ls * dans un fork

Gotscha Messages postés 4 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 14 janvier 2008 - 6 déc. 2007 à 18:45
Gotscha Messages postés 4 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 14 janvier 2008 - 10 déc. 2007 à 19:04
Bonjour à tous,

J'ai un petit problème en C que je n'arrive pas à comprendre :
Voici la partie de mon code qui me pose problème :
<hr size="2" width="100%" />if (fork() == 0){
    execlp("ls","ls","*.fra",NULL);
    perror("ls");
    exit(5);
  }
  wait(&status);
  if (status != 0){
    perror("fork");
    exit(4);
  }
<hr size="2" width="100%" />
J'aimerai savoir pourquoi, lorsque je lance mon script, il s'affiche sous unix :
ls: *.fra: Aucun fichier ou répertoire de ce type
fork: Success

2 choses :
 - pourquoi mon ls ne fonctionne pas avec mon paramètre *.fra
 - pourquoi mon perror("fork") affiche :Sucess
alors qu'il sait pertinament que le fork à échoué puisque le status est à -1

merci de votre aide,

2 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
7 déc. 2007 à 12:31
Salut
Est ce que ton programme marche en mettant à la place de "*.fra" , "-l"  ?
Sinon comment tu peut savoir si ton fork à échoué, tu ne testes pas son retour:

pid=fork();
if (pid == 0)     //Processus fils
if (pid ==-1)     //Erreur du fork
else              //Processus père

Je ne pense pas que le fork echoue parce que dans ce cas la, le processus père est arreté à la ligne wait et il n'y a personne pour le débloquer...

Status sera le code de retour du processus fils, donc regarde les codes de retour du "ls"
si 1, je pense que ca signifie que le ls à été correctement effectué.
A+

Mon site internet : http://pistol.petesampras.free.fr
0
Gotscha Messages postés 4 Date d'inscription vendredi 17 août 2007 Statut Membre Dernière intervention 14 janvier 2008
10 déc. 2007 à 19:04
Re-bonjour,

Pour ceux que ça intéresseraient, j'ai résolu d'une autre manière mon problème de ls *.fra en C :

<hr size="2" width="100%" />if(fork()==0){
    DIR* dp=opendir(".");
    struct dirent* dirp;
    if(dp == NULL){
      perror("forkrep");
    }else{
      while((dirp=readdir(dp)) !=NULL){
    if(strstr(dirp->d_name,".fra")){
      printf("%s \n",dirp->d_name);
    }
      }
      closedir(dp);
    }
  }
  wait(&status);
  if (status != 0){
    perror("x> aucun fichier .fra");
    exit(4);
  }
<hr size="2" width="100%" />merci quand même pistol_pete...

pourquoi faire simple quand on peut faire compliqué
0
Rejoignez-nous