为什么execv会崩溃?

时间:2010-10-02 00:14:03

标签: c execv

#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中没有收到任何错误消息。

编辑:用户错误。 “崩溃”意味着xcode在运行程序时冻结了。按继续工作正常。

1 个答案:

答案 0 :(得分:2)

该代码在我的环境中运行并编译良好,在Ubuntu 10下的gcc 4.4.3。这使我相信你有一个与你认为的问题不同的问题: - )


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符合您的预期(例如,可执行文件,而不是脚本)。

值得澄清“崩溃”的含义。它只是没有产生任何输出?它倾销核心文件?它是否会使您的整个操作系统陷入困境,导致重启?