2010-10-02 4 views
0
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main (int argc, const char * argv[]) 
{ 
    printf("start\n"); 
    char *const parmList[] = {"/bin/ls", "-l", NULL}; 
    execv("/bin/ls", parmList); 
    return 0; 
} 

J'ai compilé avec GCC4.2 Des idées pour lesquelles cela pourrait planter? Je ne reçois aucun message d'erreur dans xcode.pourquoi crash execv?

EDIT: erreur de l'utilisateur. "crash" signifiait xcode gelé quand il a exécuté le programme. Appuyer sur continuer fonctionne bien.

+0

Ce programme a l'air bien - avez-vous vérifié l'état de retour de 'execv'? –

+0

Définir "crash". –

Répondre

2

qui fonctionne de code et compile bien dans mon environnement, gcc 4.4.3 sous Ubuntu 10. Cela me conduit à croire que vous avez un problème différent de celui que vous pensez que vous avez :-)


[email protected]:~$ ./testprog 
start 
total 2152 
drwxr-xr-x 11 pax pax 4096 2010-10-02 08:23 Pax 
: : 
----r-S--- 1 pax pax  0 2010-08-23 18:58 xyz 

[email protected]:~$ gcc --version 
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
Copyright (C) 2009 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

Essayez le code suivant pour voir si le exec réel est défaillant. Si c'est le cas, il devrait vous dire pourquoi. Si ce n'est pas le cas, vous ne verrez pas la sortie rc.

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <errno.h> 

int main (int argc, const char * argv[]) 
{ 
    int rc; 
    printf("start\n"); 
    char *const parmList[] = {"/bin/ls", "-l", NULL}; 
    rc = execv("/bin/ls", parmList); 
    printf ("rc = %d, errno = %d\n", rc, errno); 
    return 0; 
} 

Vérifiez également que le /bin/ls est ce que vous attendez qu'il soit (un exécutable, pas un script, par exemple).

Et cela vaut la peine de clarifier ce que vous entendez par "crash". Est-ce que ça ne produit pas de sortie? Est-ce qu'il dumping un fichier de base? Est-ce que cela met tout votre système d'exploitation à genoux, provoquant un redémarrage?

+0

+1, j'ai essayé sur mon Mac et ça marche bien. –

+0

drôle. Quand il est dans xcode, il gèle comme si j'avais une erreur. Si j'appuie sur continuer, cela fonctionne comme il se doit. – joels

+1

Intéressant. Si "continuer" est un bouton, vous pouvez avoir un point d'arrêt sur lequel il s'arrête. C'est une possibilité. Une autre est que l'EDI xcode ne peut pas être utilisé pour que tout le processus soit échangé en dessous (ce que 'exec' fait). Les deux sont des suppositions mais possibles néanmoins. – paxdiablo