我想从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/