execvp没有将args传递给被调用的程序

时间:2014-09-19 08:59:59

标签: c linux exec fork

我想通过fork和exec加载一个新程序,并将args传递给新程序。 但我失败了。

//fork_exec.c
int main()
{
    char *args[] = {"/home"};
    pid_t pid = fork();
    switch(pid)
    {
    case -1:
        return;
    case 0://child
        execvp("ls",args);
        _exit(1);
    default://parent
        return;
    }
}

我编译文件fork_exec.c然后获取文件a.out。 然后我输入

  

./ a.out的

在终止中

。我建议在屏幕上显示/ home中的文件列表。 但是显示的文件实际上是对fork_exec.c和a.out进行了战争。 所以我猜args没有成功传递给ls程序。 请有人告诉我发生了什么以及为什么。 感谢。

1 个答案:

答案 0 :(得分:4)

int main()
{
    char * args[] = {"ls","/home/",NULL};
    pid_t pid = fork();
    switch(pid)
    {
    case -1:
        return;
    case 0://child
        execvp(args[0],args);
        _exit(1);
    default://parent
        return;
    }
}

这很有效。试试并阅读其MAN页面。