[关闭]
@zwh8800 2017-08-23T10:04:32.000000Z 字数 716 阅读 191307

exec系列系统调用

blog 归档 unix 系统编程


exec系列系统调用有六个,本文讲解了它们之间的区别


exec系列系统调用有六个,通过后缀字母的含义很好记忆:

l 代表参数是一个list(用NULL结尾的可变参数),v 代表参数是一个vector(char* const argv[])。
p 代表调用时可以只提供文件名,只要该文件在系统变量PATH中
e 代表为新进程提供了一个新的环境

原型如下:

  1. #include <unistd.h>
  2. extern char **environ;
  3. int execl(const char *path, const char *arg, ...);
  4. int execlp(const char *file, const char *arg, ...);
  5. int execle(const char *path, const char *arg,
  6. ..., char * const envp[]);
  7. int execv(const char *path, char *const argv[]);
  8. int execvp(const char *file, char *const argv[]);
  9. int execvpe(const char *file, char *const argv[],
  10. char *const envp[]);

上面的都是c函数,只有execve是系统调用。另外多出的一个execvpe是linux特有的,只有glibc库才有

  1. #include <unistd.h>
  2. int execve(const char *filename, char *const argv[],
  3. char *const envp[]);

unix网络编程中的图给出了他们之间的关系:

image_1bl0edi351pei15d8vba25occg9.png-96.5kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注