我最近一直在学习系统编程课程,并且通过系统调用 exec() 和 execve()来学习 。到目前为止,我找不到这两者之间的任何区别,即使Wikipedia也没有给出明确的解释,所以 exec() 和 execve() 之间也存在区别。
有人可以提供有关exec系列系统调用的简短描述,例如 execl() , execv() , execle() , execvp() 。
使用man exec和阅读:
man exec
The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer.
execv
int execv(const char *path, char *const argv[]);
所以你传递一个数组作为参数
int execle(const char *path, const char *arg, ..., char * const envp[]);
几乎相同,但不是一个数组,而是一个值列表(字符串),后面跟着一个数组来指定环境。
这里:
int execvp(const char *file, char *const argv[]);
您正在调用的文件没有路径,因此它希望您path在调用之前已经处于正确的位置。
path
最后但并非最不重要的:
int execve(const char *filename, char *const argv[], char *const envp[]);
与上一个相似,但是现在有两个数组,用于参数和环境变量。