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 返回的输出可能很大(100 M),我很感兴趣这种方法中的哪一种是首选的。谢谢。

4

1 回答 1

5

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

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

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

于 2013-11-14T08:51:38.557 回答