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 结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。