我想在我的C代码中执行二进制文件。执行哪个更好? popen()
或system()
编辑:我尝试使用system
,但执行过程似乎陷入了最终并且没有返回到我的代码。
有关该怎么做的任何建议?
由于
答案 0 :(得分:32)
popen()
使您可以控制进程的输入或输出文件流。 system()
没有。如果您不需要访问进程的I / O,则可以使用system()
来简化。
system()
在C89和C99中; popen()
仅为Posix(尽管Windows API也有一个)。
两个函数都会调用某种形式的 shell 来执行命令(例如Linux上的/bin/sh
,而Windows上可能cmd.exe
。如果你想直接执行一个可执行文件并且你在Posix上,你也可以查看exec*
- 与fork()
结合的函数系列(因为exec()
替换< / em>当前流程)。
答案 1 :(得分:4)
如果要运行shell命令并希望父进程能够与子进程通信,请使用popen
。 (它将孩子的输入或输出挂钩到你回来的流。)否则,更喜欢exec
系列函数(可能与fork
一起使用); exec
'进程继承了大多数打开的文件描述符(包括stdin,stdout和stderr),因此您可以将输入和输出挂钩到您喜欢的任何内容...而且,更少安全隐患。
system
。它产生一个shell来运行命令,shell可以以任何方式解析命令。特别是,某些环境变量(如$IFS
和/或$PATH
)可以通过这样的方式进行修改,以使父进程执行您从未想过的程序。虽然popen
似乎做同样的事情,但它至少提供了在一般情况下值得的功能。