1. 首页
  2. 操作系统
  3. Unix
  4. exec函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

exec函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库

上传者: 2024-07-15 20:41:46上传 PDF文件 18.16MB 热度 10次

在 UNIX 系统中,进程控制是一个重要的组成部分,而 exec 函数族在其中扮演着关键角色。8.3 节曾提及用 fork 函数创建子进程后,子进程往往需要调用一种 exec 函数以执行另一个程序。当进程调用一种 exec 函数时,该进程完全由新程序代换,而新程序则从其 main 函数开始执行。因为调用 exec 并不创建新进程,所以前后的进程 ID 并未改变。exec 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。

在实际编程中,有六种不同的 exec 函数可供使用,它们常常被统称为 exec 函数。这些 exec 函数都是 UNIX 进程控制原语。用 fork 可以创建新进程,用 exec 可以执行新的程序。exit 函数和两个 wait 函数处理终止和等待终止。这些是我们需要的基本的进程控制原语。在后面各节中将使用这些原语构造另外一些如 popen 和 system 之类的函数。

为了更深入理解 exec 函数的应用,您可以参考以下资源:

理解这些函数的详细实现对编写健壮的程序至关重要。以下是 exec 函数族的原型声明:


#include 



int execl(const char *pathname, const char *arg0, ... /* (char *) 0 */);

int execv(const char *pathname, char *const argv[]);

int execle(const char *pathname, const char *arg0, ... /* (char *)0, char *const envp[] */);

int execve(const char *pathname, char *const argv[], char *const envp[]);

int execlp(const char *filename, const char *arg0, ... /* (char *) 0 */);

int execvp(const char *filename, char *const argv[]);

这些函数之间的第一个区别是前四个取路径名作为参数,后两个则取文件名作为参数。若出错则返回 -1,若成功则不返回。

用户评论