execvp(argv[1], &argv[1])
execvp() 的第二个参数究竟做了什么?
第二个参数应该是指向一个以NULL
-terminated 字符串数组的指针,它成为被argv
调用进程的。
这个数组的第一个元素成为argv[0]
被调用者的,不一定和它的路径相同;例如,您可以通过完整路径调用进程,但将其基名作为argv[0]
. 此外,某些程序的行为会根据它们的argv[0]
. argv[0]
著名的例子是 Unix shell以 a 开头时表现为“登录 shell” -
,因此原始login
程序可以这样做
char *argv[2] = {"-sh", NULL};
execvp("/bin/sh", argv);
它作为argv
向量传递给被调用程序。我引用文档:
execv()、execvp() 和 execvpe() 函数提供了一个指向以 null 结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。