popen vs c ++的系统调用

时间:2013-11-14 08:44:54

标签: c++ bash system popen

在我的C ++程序中,我需要执行一个bash脚本。然后我需要返回在我的c ++程序中运行脚本获得的结果。 我有两种可能性:

1. use system(script.sh). In script.sh I redirect the output in a file which is processd after I return to the c++ program.
2. use popen

我感兴趣的是这个方法中的哪一个是优先考虑的,因为script.sh返回的输出可能很大(100 M)。感谢。

1 个答案:

答案 0 :(得分:5)

使用system时,父进程将被阻止,直到子进程终止。子进程将以完整的性能运行。

popen将启动子进程,但不要等到它结束。因此父进程可以在子进程运行时继续执行任何操作,例如可以读取子进程的输出。父进程可以决定是否要从子进程管道中读取阻塞或非阻塞,具体取决于父进程必须执行的其他操作。子进程将并行运行并将其输出写入管道。如果父进程未从管道读取并且达到管道的内存限制,则在写入时可能会被阻塞。所以父进程应该继续读取输出。

system方法稍微简单一些。但popen使您可以在进程仍在运行时读取进程的输出。而且您不需要额外的文件(空间)。所以我会使用popen。