2015-11-03 1 views
1

Je cherche un moyen de déterminer si la fonction execvp a réussi ou échoué. Je sais que si elle retourne, elle a échoué, mais je cherche un cas dans lequel la commande lancée depuis execvp a échoué. Comme dans le cas où "ls" essaye de lister un dossier inexistant. A partir de là, je prévois d'ajouter un support pour les opérateurs logiques (par exemple & &, ||). Merci.Déterminez si l'exécutable a réussi ou échoué

else { 
    int status; 
    if (wait(&status) < 0) { 
     perror("wait failed"); 
     exit(0); 
    } 
    if (status == 0) { 
     success = true; 
    } 
    else { 
     success = false; 
    } 
} 

Répondre

3

Vous devez d'abord fork() un nouveau processus, ont alors ce nouvel appel de processus execvp. Le processus parent doit ensuite appeler wait(), ce qui lui permettra de récupérer le statut de sortie de la commande que vous avez exécutée (ls, dans ce cas).

Lorsque vous vérifiez l'état de retour récupéré à partir de wait(), veillez à utiliser WIFEXITED() pour vous assurer que l'enfant a quitté normalement et utilisez WEXITSTATUS() pour extraire le statut de sortie.

+0

Maintenant, j'ai ceci, à la fin de mes vérifications pour voir si la fourche a échoué. Mais je ne pense pas que je cherche la bonne information de statut. 'else if (c_pid> 0) { pid = waitpid (c_pid, & état, 0); if (pid == -1) {perror ("attente d'échec"); \t sortie (0); \t} if (état == 0) { \t succès = vrai; \t} succès = faux; /* if ((pid = attente (& état)) <0) { perror ("wait ..."); sortie (1); } */ } ' – xythyl

+0

@xythyl Mettez à jour votre question avec votre code. Il est impossible de lire dans un commentaire. – dbush

+0

Merci! Aussi, comment je correctement poster du code ici? Pour une raison quelconque, il ne contenait aucun formatage. – xythyl