我想在我的C代码中执行二进制文件。 执行哪个更好? popen()
或system()
编辑 :我试图使用system
,但执行过程似乎陷入最后,并没有返回到我的代码。
关于该怎么做的任何建议?
谢谢
popen()
使您可以控制进程的输入或输出文件流。 system()
没有。 如果您不需要访问进程的I / O,则可以使用system()
来简化。
system()
在C89和C99中; popen()
只是Posix(虽然Windows API也有一个)。
这两个函数都调用某种forms的shell来执行命令(例如Linux上的/bin/sh
,以及Windows上的cmd.exe
)。 如果你想直接执行一个可执行文件并且你在Posix上,你也可以使用fork()
查看exec*
-family函数(因为exec()
取代了当前进程)。
如果要运行shell命令并希望父进程能够与子进程通信,请使用popen
。 (它将孩子的输入或输出挂钩到你得到的流。)否则,更喜欢exec
系列函数(可能与fork
一起); exec
进程inheritance了大多数打开的文件描述符(包括stdin,stdout和stderr),因此你可以将输入和输出挂钩到你喜欢的任何东西……而且,安全隐患更少。
除非必须运行shell命令,否则通常最好避免使用system
。 它产生一个shell来运行命令,shell可以以任何方式解析命令。 特别是,可以修改某些环境变量(如$IFS
和/或$PATH
),以使父进程执行您从未想过的程序。 尽管popen
看起来做同样的事情,但它至少提供了在一般情况下值得的function。
以上就是c/c++开发分享C中的popen()和system()有什么区别相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560653.html