Pergunta

#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;
}

Eu compilei com o GCC4.2 Alguma idéia de por que isso pode travar? Não estou recebendo nenhuma mensagem de erro no xcode.

Editar: erro do usuário. "Crash" significava que o Xcode congelou quando executou o programa. Pressionar continue funciona bem.

Foi útil?

Solução

Esse código é executado e compila bem no meu ambiente, GCC 4.4.3 no Ubuntu 10. Isso me leva a acreditar que você tem um problema diferente daquele que acha que tem :-)


pax@pax-desktop:~$ ./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

pax@pax-desktop:~$ 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.

Experimente o seguinte código para ver se o real exec está falhando. Se for, deve dizer o porquê. Se não for, então você não verá o rc saída em todo.

#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;
}

Verifique também para garantir que o /bin/ls é o que você espera que seja (um executável, não um script, por exemplo).

E vale a pena esclarecer o que você quer dizer com "Crash". Isso simplesmente não está produzindo nenhuma saída? Ele despeja um arquivo principal? Está trazendo todo o seu sistema operacional para os joelhos, causando uma reinicialização?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top