永久获取在C ++中运行的shell命令的输出

时间:2012-03-24 20:28:58

标签: c++ popen

我想从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;
}

问题:

我希望永久运行我的程序并在程序运行时获取输出,不仅要从程序中获取一次输出。

有什么想法吗?

先谢谢了。

1 个答案:

答案 0 :(得分:0)

你的问题有点不清楚,但我怀疑问题是缓冲问题和答案:我理解的是程序my_program偶尔产生的输出,你展示的程序应该在{{1}时开始行动打印东西。此外,我怀疑该程序总共不会产生大量输出,例如:不到4k。

问题是大多数实现缓冲标准输出的方式不同,这取决于它是否指向“控制台”或其他东西:当写入控制台输出时往往是行缓冲区而其他目标缓冲区大得多的缓冲区。但是,缓冲区可以明确刷新,从而大大降低了输出的性能。当然,在上面的场景中,你会对及时的输出而不是输出性能更感兴趣。

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