1
execvp(argv[1], &argv[1])

execvp() 的第二个参数究竟做了什么?

4

2 回答 2

5

第二个参数应该是指向一个以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);
于 2012-06-13T15:27:57.293 回答
0

它作为argv向量传递给被调用程序。我引用文档

execv()、execvp() 和 execvpe() 函数提供了一个指向以 null 结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。

于 2012-06-13T15:28:31.280 回答