这里是execlp函数的原型(prototype):
int execlp(const char *file, const char *arg, ...);
手册页说 arg
的第一个参数(即 arg0),“按照惯例,应该指向与正在执行的文件关联的文件名。”
然后我做了这些实验:
/*These three lines all produce the expected result:
. .. a.out main.c */
execlp("ls", "ls", "-a", 0);
execlp("ls", "arg0 is meaningless", "-a" , 0);
execlp("ls", "", "-a" , 0);
/*But this one does not work:
a.out main.c */
execlp("ls", "-a" , 0);
那么问题来了,arg0参数在任何情况下都有意义吗?为什么界面要这样设计?
最佳答案
主要的函数签名是
int main(int argc, char ** argv);
其中 argv[0] 是可执行文件的名称(在您的例子中是 arg0),因此应用程序期望其命令行来自 argv[1]。
在某些情况下,单个二进制文件可以有多个名称(例如,busybox,有时使用不同名称的符号链接(symbolic link),指向单个二进制文件)。在这种情况下 argv[0] 用于确定调用二进制文件的链接。
关于c++ - Linux 执行函数 : what is the arg0 parameter used for?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678056/