在我的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),我想知道哪种方法更好。谢谢。
当使用 system
父进程被阻塞,直到子进程终止。子进程将以全部性能运行。
popen
会启动子进程,但不会等到子进程结束。所以父进程可以在子进程运行时继续做任何它想做的事情,例如它可以读取子进程的输出。父进程可以决定从子进程的输出管道中读取阻塞或非阻塞,这取决于父进程有多少其他事情要做。子进程将并行运行并将其输出写入管道。如果父进程没有从管道中读取,而管道的内存又达到了极限,那么它在写的时候可能会被阻塞。所以父进程应该继续读取输出。
父进程的 system
办法比较简单。但 popen
让你可以在进程还在运行时读取它的输出。而且你不需要额外的文件(空间)。所以我会使用 popen
.