2010-11-11 11 views
0

La fonction ci-dessous prend un tableau de pointeurs de char Exemple: arr [0]: ls arr [ 1]: -l arr [2]: -a arr [3]:/etc arr [4]: ​​NULL/* Depuis execvp attend un NULL à la fin */linuux - execvp: Lors de l'exécution de la commande ls - erreur "ls: impossible d'accéder/etc: aucun fichier ou répertoire"

// function call is runCmd(arr); la fonction définition est la suivante:

void runCmd(char *arr[]){ 

     pid_t child_pid,tpid; 
     int child_status; 

     child_pid = fork(); 

     if(child_pid == 0){ 

       /* The child process executes the exec*/ 

       execvp(arr[0],arr); 

       /*if it returns it must have failed */ 
       fflush(stdout); 
       printf("Unknown Command \n"); 
       exit(0); 
     } 
       else { 
       /* let the parent wait for the child */ 
       do{ 
         tpid = wait(&child_status); 
       }while(tpid != child_pid); 
     } 
} 

Après l'exécution, je reçois le message -

ls: cannot access /etc 
: No such file or directory 
+0

I ajouté main() { char * rgs [] = { "ls", "-l", "-a", "/ etc", NULL}; runCmd (rgs); } ET l'a exécuté sous Linux. J'ai bien travaillé. Poster plus de code. –

Répondre

7

On dirait que vous lisez dans la commande et en oubliant de dépouiller le saut de ligne, ce qui provoque votre ls pour essayer de lister le répertoire "/etc\n".

+0

Wow. Quel oeil! –