以下是可在C(和C++)中使用的所有exec版本:
execl
execle
execlp
execv
execve
execvp
它们之间有什么区别?你如何知道该使用哪一个?
这些区别是以下几种组合:
L与V: 你想将参数传递给exec'ed程序的方式:
execl()
,execle()
,execlp()
和execlpe()
execv()
,execve()
,execvp()
和execvpe()
当要发送到exec'ed进程的参数数量是可变的,例如不提前知道,则数组格式很有用,因此无法在函数调用中放入固定数量的参数。
E: 带有“e”结尾的版本允许您另外传递一个char*数组,这是一组在exec'ed程序启动之前添加到生成的进程环境中的字符串。这实际上是传递参数的另一种方式。
P: 带有“p”的版本使用环境变量PATH
来搜索要执行的命名可执行文件。没有“p”的版本则要求在可执行文件名之前添加绝对或相对文件路径,如果它不在当前工作目录中。
Opengroup是核心C/C++函数的最佳参考之一。
exec*的文档在这里:http://pubs.opengroup.org/onlinepubs/009695399/functions/environ.html
这是C运行时库的Posix扩展。如果官方的Posix文档不足够详细,我可以推荐一本书——Samuel P. Harbison, Guy L.Steele, 2002年的《C参考手册》第416页——涵盖了这个问题。