我想在我的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);execd进程继承了大多数打开的文件描述符(包括stdin,stdout和stderr),因此您可以将输入和输出连接到自己喜欢的任何东西...此外,对安全性的影响也较小。
system通常最好避免使用,除非必须运行shell命令。它产生一个运行命令的外壳程序,外壳程序可以按自己喜欢的任何方式解析该命令。特别是,某些环境变量(如$IFS和/或$PATH)可以通过某种方式修改,以使父级执行您从未打算执行的程序。尽管popen看起来做同样的事情,但它至少提供了使其在一般情况下值得的功能。
| 归档时间: |
|
| 查看次数: |
21866 次 |
| 最近记录: |