C和C ++中使用的exec有哪些不同版本?


91

这些都是可以在C(和C ++)中使用的exec版本。

execl
execle
execlp
execv
execve
execvp

它们之间有什么区别?您怎么知道要使用哪个?

Answers:


181

不同之处在于:

  1. L vs V:是否要将参数传递给执行程序

    • 大号:在呼叫个体参数(变量参数列表): ,execl()execle()execlp()execlpe()
    • V:为char *的阵列execv()execve()execvp(),和execvpe()

    当要发送给执行过程的参数数量可变时,数组格式很有用-就像事先不知道的那样,因此您不能在函数调用中放入固定数量的参数。

  2. E:最后带有“ e”的版本可让您另外传递char *数组,这些数组是在执行程序启动之前添加到生成的进程环境中的一组字符串。确实,还有另一种传递参数的方式。

  3. P:其中带有“ p”的版本使用环境变量PATH 搜索名为执行的可执行文件。如果没有可执行文件的版本不在当前工作目录中,则不带“ p”的版本要求在该可执行文件的文件名之前添加绝对或相对文件路径。


1
到目前为止,我所看到的最好的解释。它几乎与官方文档/参考文献一样短,但是它的表达力,信息量和可理解性却高出一千倍。谢谢。
Akito

5

Opengroup是核心c / c ++函数的最佳通用参考文献之一。

exec *的文档在这里:http : //pubs.opengroup.org/onlinepubs/009695399/functions/environ.html


2
这并不能真正回答问题,仅是链接。
让·弗朗索瓦·法布尔

在到达这里之前,我阅读了网站上的文档,但并没有太大帮助。尽管解释很详尽,但解释却很简短。此外,如果您是从头开始搜索的,则很难找到正确的解释。
Akito

-4

它是C运行时库的Posix扩展。如果Posix的官方文档不足,那么我可以推荐本书-Samuel P. Harbison,Guy L.Steele,2002年“ CA参考”第416页-涵盖了该问题。


2
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。-评论
-31piy

链接是对亚马逊和posxis标准的,对读者有用。好的,我按照您的要求删除了链接,即使我不同意这样做也更好。如果现在可读性更高,请删除您的文档。
bruziuz

1
我没有为你的答案投票。我刚刚对您的回答进行了审核,认为我的回答质量低下。我不是要删除链接。这里的重点是包括链接中的相关摘录,以帮助将来的读者立即理解答案。仅在答案中发布链接不会帮助任何人。
31piy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.