popen与c++的系统调用

问题描述 投票:1回答:1

在我的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 返回的结果可能很大(100M),我想知道哪种方法更好。谢谢。

c++ bash system popen
1个回答
5
投票

当使用 system 父进程被阻塞,直到子进程终止。子进程将以全部性能运行。

popen 会启动子进程,但不会等到子进程结束。所以父进程可以在子进程运行时继续做任何它想做的事情,例如它可以读取子进程的输出。父进程可以决定从子进程的输出管道中读取阻塞或非阻塞,这取决于父进程有多少其他事情要做。子进程将并行运行并将其输出写入管道。如果父进程没有从管道中读取,而管道的内存又达到了极限,那么它在写的时候可能会被阻塞。所以父进程应该继续读取输出。

父进程的 system 办法比较简单。但 popen 让你可以在进程还在运行时读取它的输出。而且你不需要额外的文件(空间)。所以我会使用 popen.

© www.soinside.com 2019 - 2024. All rights reserved.