@zwh8800
2017-08-23T02:04:32.000000Z
字数 716
阅读 191606
blog 归档 unix 系统编程
exec系列系统调用有六个,本文讲解了它们之间的区别
exec系列系统调用有六个,通过后缀字母的含义很好记忆:
l 代表参数是一个list(用NULL结尾的可变参数),v 代表参数是一个vector(char* const argv[])。
p 代表调用时可以只提供文件名,只要该文件在系统变量PATH中
e 代表为新进程提供了一个新的环境
原型如下:
#include <unistd.h>extern char **environ;int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const char *arg,..., char * const envp[]);int execv(const char *path, char *const argv[]);int execvp(const char *file, char *const argv[]);int execvpe(const char *file, char *const argv[],char *const envp[]);
上面的都是c函数,只有execve是系统调用。另外多出的一个execvpe是linux特有的,只有glibc库才有
#include <unistd.h>int execve(const char *filename, char *const argv[],char *const envp[]);
unix网络编程中的图给出了他们之间的关系:

