我想在我的C代码中执行二进制文件.执行哪个更好?popen()
要么system()
编辑:我试图使用system
,但执行过程似乎陷入最后,并没有返回到我的代码.
有关该怎么办的任何建议?
谢谢
Ker*_* SB 34
popen()
使您可以控制进程的输入或输出文件流.system()
没有.如果您不需要访问进程的I/O,则可以system()
简单地使用.
system()
在C89和C99; popen()
仅为Posix(尽管Windows API也有一个).
这两个函数都调用某种形式的shell来执行命令(例如/bin/sh
在Linux上,可能cmd.exe
在Windows上).如果你想直接执行一个可执行文件,并且你在Posix上,你也可以查看exec*
-family of functions with fork()
(与exec()
替换当前进程).
使用popen
,如果你想运行shell命令,并希望父进程能够交谈的孩子。(它会将孩子的输入或输出与您返回的流挂钩。)否则,建议使用exec
函数系列(可能与结合使用fork
);exec
d进程继承了大多数打开的文件描述符(包括stdin,stdout和stderr),因此您可以将输入和输出连接到自己喜欢的任何东西...此外,对安全性的影响也较小。
system
通常最好避免使用,除非必须运行shell命令。它产生一个运行命令的外壳程序,外壳程序可以按自己喜欢的任何方式解析该命令。特别是,某些环境变量(如$IFS
和/或$PATH
)可以通过某种方式修改,以使父级执行您从未打算执行的程序。尽管popen
看起来做同样的事情,但它至少提供了使其在一般情况下值得的功能。