以下是函数声明:
int execlp(const char *file, const char *arg, ...);
以下是参数说明:
file: The executable that has to be executed by the new process. This executable is searched for in the path specified by the environmental variable PATH.
*arg,...: list of arguments terminated by a NULL argument.
然后我们为什么称这样的函数:
execlp("ls","ls",NULL);
赢了它变成" ls -ls"这是什么意思?
答案 0 :(得分:3)
第一个是要加载以执行的二进制文件。第二个是进程的名称(例如,在ps
的输出中显示)。它们是相同的很常见,但没有必要。
因此,在由exec*()
执行的二进制文件中,您为该过程提供的名称可以argv[0]
获得。
答案 1 :(得分:3)
关于execlp的this文件(由我添加的大胆字体)
execl(),execlp()和execle()函数中的const char * arg和后续省略号可以被认为是arg0,arg1,...,argn。它们一起描述了一个或多个指向以null结尾的字符串的指针的列表,这些字符串表示执行程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。参数列表必须以NULL指针终止,并且由于这些是可变参数函数,因此必须将此指针强制转换为(char *)NULL。
答案 2 :(得分:2)
不,第一个参数是可执行文件的名称。例如,在许多UNIX系统中,您将具有指向单个可执行文件的符号链接,然后可执行文件可以确定它的调用方式。一个例子是BusyBox,它是一个单独的二进制文件,但它包含数十个和几十个命令的功能。
通常虽然名称与可执行文件相同,但大多数可执行文件并不关心名称。
例如,在BusyBox案例中,如果你打电话给execlp("/path/to/busybox", "ls", NULL);
,它的行为就像命令ls
那样,如果你打电话给execlp("/path/to/busybox", "ps", NULL);
,它的行为就像ps
命令。与符号链接相同的只是execlp("/path/to/ps", "ps", NULL);