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

108

以下是可在C(和C++)中使用的所有exec版本:

execl
execle
execlp
execv
execve
execvp

它们之间有什么区别?你如何知道该使用哪一个?

3个回答

216

这些区别是以下几种组合:

  1. L与V: 你想将参数传递给exec'ed程序的方式:

    • L: 在调用中使用单个参数(可变参数列表):execl()execle()execlp()execlpe()
    • V: 作为char*数组:execv()execve()execvp()execvpe()

    当要发送到exec'ed进程的参数数量是可变的,例如不提前知道,则数组格式很有用,因此无法在函数调用中放入固定数量的参数。

  2. E: 带有“e”结尾的版本允许您另外传递一个char*数组,这是一组在exec'ed程序启动之前添加到生成的进程环境中的字符串。这实际上是传递参数的另一种方式。

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


5

3
这并没有真正回答这个问题,而且只是一个链接。 - Jean-François Fabre
在来这里之前,我阅读了网站上的文档,但并没有帮助太多。解释非常简短,即使它们应该详尽。此外,如果您从零开始搜索,很难找到正确的解释。 - Akito

-5

这是C运行时库的Posix扩展。如果官方的Posix文档不足够详细,我可以推荐一本书——Samuel P. Harbison, Guy L.Steele, 2002年的《C参考手册》第416页——涵盖了这个问题。


3
虽然这个链接可能回答了问题,但最好包括答案的关键部分并提供链接作为参考。仅有链接的答案如果链接页面发生更改可能会变得无效。- 【来自审查】 - 31piy
链接指向亚马逊和POSIX标准,以便读者使用。好的,我已经按照您的要求删除了链接,尽管我不同意这样做更好。如果现在更易读,请撤销您的负评。 - Konstantin Burlachenko
2
我没有给你的回答点踩。我只是对你的回答进行了评论,我认为它的质量很低。我并不是想删除链接。重点是要包含相关摘录,这有助于未来的读者立即理解答案。仅仅在回答中发布链接对任何人都没有帮助。 - 31piy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接