我有一个示例程序:
#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
只是说:“按照惯例,第一个参数应指向与正在执行的文件关联的文件名”,这似乎支持我的尝试,因此我不确定我缺少什么。