我想从shell命令(my_program)获得输出。这是取自this网站的示例:

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {
   FILE *in;
   char buff[512];

   if(!(in = popen("my_program", "r"))){
      return 1;
   }

   while(fgets(buff, sizeof(buff), in)!=NULL){
      cout << buff;
   }
   pclose(in);

   return 0;
}


问题:

我想永久运行我的程序并在程序仍在运行时获取输出,而不仅仅是从程序中获取输出。

任何的想法?

先谢谢了。

最佳答案

您的问题尚不清楚,但我怀疑问题是缓冲区和答案刷新:我的理解是程序my_program偶尔会产生输出,并且您显示的程序应该在my_program打印内容时启动。我进一步怀疑这个程序不会产生很多输出,例如少于4k。

问题在于,大多数实现对标准输出的缓冲取决于它是定向到“控制台”还是其他东西:当写入控制台输出时,它倾向于行缓冲,而其他目标则缓冲更大的缓冲。但是,可以显式刷新缓冲区,从而大大降低输出的性能。当然,在上述情况下,您会对及时输出而不是输出性能更感兴趣。

一种使用C ++刷新输出缓冲区的简单方法是使用out << std::flush。如果您想快速验证是否存在此问题,则可以使用out << std::unitbuf将流设置为在每次输出操作后刷新。有许多其他方法可以自动刷新,但是这些方法涉及更多。

关于c++ - 永久获取C++中运行的Shell命令的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9855312/

10-14 04:51