c++ - Linux 执行函数 : what is the arg0 parameter used for?

标签 c++ c linux unix

这里是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/

相关文章:

c - if语句与C中的字符串比较

python - 在以下Python脚本中需要帮助

c++ - 模板成员函数错误: clang doesn't match any member function

c++ - 存在 C++ 设置错误的用户对象

C++ 不确定如何让我的程序输出空格的位置

linux - 在循环中捕获 bash 函数的返回值和输出

linux - BackTrack 5 R3 中的 ACR120U 读卡器

c++ - 用于 Sutter 的无锁队列的 Boost 库或 C++0x 原子的等效实现?

c - typedefed 结构的未知类型错误

c - 如何在 C 中将所有结构体元素复制到 char * 数组中