gpt4 book ai didi

c - exec 和 execve 等系统调用的 exec 系列的功能有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 00:14:57 25 4
gpt4 key购买 nike

我最近一直在学习系统编程类(class),并且完成了系统调用exec()execve()。目前为止我找不到这两者有什么区别,维基百科也没有给出明确的解释,所以exec()execve()有什么区别。

请有人能简要描述一下 exec 系列系统调用,例如 execl()execv()execle()execvp()

最佳答案

没有exec 系统调用——这通常用来指代所有execXX 调用作为一个整体。它们本质上都做同样的事情:将新程序加载到当前进程中,并为其提供参数和环境变量。不同之处在于如何找到程序、如何指定参数以及环境来自何处。

  • 名称中带有v 的调用采用数组参数来指定新程序的argv[] 数组。参数的结尾由包含 NULL 的数组元素指示。

  • 名称中带有l 的调用将新程序的参数作为函数本身的可变长度参数列表。参数的结尾由 (char *)NULL 参数指示。您应该始终包含类型转换,因为 NULL 允许为整数常量,调用可变参数函数时的默认参数转换不会将其转换为指针。

  • 名称中带有e 的调用采用额外的参数(或l 情况下的参数)来提供新程序的环境;否则,程序继承当前进程的环境。这与 argv 数组的提供方式相同:execve() 的数组,execle() 的单独参数。

  • 名称中带有 p 的调用搜索 PATH 环境变量以查找程序,如果它没有目录(即' 包含一个 / 字符)。否则,程序名称始终被视为可执行文件的路径。

  • FreeBSD 5.2 添加了另一个变体:execvP(大写 P)。这类似于 execvp(),但它不是从 PATH 环境变量中获取搜索路径,而是函数的显式参数:

int execvP(const char *file, const char *search_path, char *const argv[]);

关于c - exec 和 execve 等系统调用的 exec 系列的功能有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com