почему может произойти сбой execv? - PullRequest
0 голосов
/ 02 октября 2010
#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;
}

Я скомпилировал с GCC4.2 Есть идеи, почему это может произойти сбой?Я не получаю никаких сообщений об ошибках в xcode.

EDIT: ошибка пользователя.«крах» означал, что xcode завис при запуске программы.Продолжение нажатия работает нормально.

1 Ответ

2 голосов
/ 02 октября 2010

Этот код прекрасно работает и компилируется в моей среде, gcc 4.4.3 под Ubuntu 10. Это заставляет меня поверить, что у вас проблема, отличная от той, которая, по вашему мнению, у вас есть: -)


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.

Попробуйте следующий код, чтобы убедиться, что фактический exec не работает.Если это так, он должен сказать вам, почему.Если это не так, то вы вообще не увидите вывод 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;
}

Также убедитесь, что /bin/ls соответствует ожидаемому (исполняемый файл, несценарий, например).

И стоит уточнить, что вы подразумеваете под «сбой».Это просто не производит никакого выхода?Это дамп файла ядра?Это ставит всю вашу ОС на колени, вызывая перезагрузку?

...