用exec调用时,为什么没有将argv [0]设置为程序名称?

时间:2018-12-12 12:21:17

标签: c unix command-line exec

我有一个示例程序:

#include <stdio.h>
int main(int argc, char *argv[])
{
    for (int arg = 0; arg < argc; ++arg)
    {
        printf("%s\n", argv[arg]);
    }
    return 0;
}

当我编译并运行时,它的行为符合我的预期:

>>> gcc callee.c -std=c99 -o callee
>>> ./callee foo bar baz quux
./callee
foo
bar
baz
quux

但是现在我想从其他程序中调用它:

#include <unistd.h>
int main(int argc, char *argv[])
{
    execl("callee", "foo", "bar", "baz", "quux", (char *)NULL);
    return 0;
}

程序名称不再传递给argv [0]!

>>> gcc -std=c99 caller.c -o caller
>>> ./caller
foo
bar
baz
quux

我想我可以通过在调用execl时第二次传递程序名称来获得所需的行为,但是我担心这是否是正确的方法。

man exec只是说:“按照惯例,第一个参数应指向与正在执行的文件关联的文件名”,这似乎支持我的尝试,因此我不确定我缺少什么。

0 个答案:

没有答案