Mr *_*ght 2 c linux argv argc execl
void main(int argc,char *argv[])
{
for (int i = 0; i < argc; i++)
{
printf("%s ", argv[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
./test 1 2 3当我在终端中使用命令来执行这个程序时,我得到了结果./test 1 2 3,但是当我execl("/usr/src/test", "1", "2", "3", NULL)在另一个程序中使用函数时,我得到了结果
1 2 3,为什么?
的语法execl()是:
int execl(const char *path, const char *arg0, ..., /*, (char *)0, */);
Run Code Online (Sandbox Code Playgroud)
所以你有了
path = "/usr/src/test"
arg0 = "1"
arg1 = "2"
arg3 = "3"
Run Code Online (Sandbox Code Playgroud)
参数argN被放入argv新进程的数组中。
您必须重复该路径才能arg0将其放入argv[0].
execl("/usr/src/test", "/usr/src/test", "1", "2", "3", NULL)
Run Code Online (Sandbox Code Playgroud)
这不是自动完成的,因为argv[0]不需要与程序路径相同,并且在某些情况下也不是这样(例如,通过-在 中添加前缀来调用登录 shell argv[0])。