[英]Get permanently the output from a shell command running in C++
我想从shell命令(my_program)获得输出。 下面是采取了比如这个网站:
#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
生成输出,并且当my_program
打印某些内容时,您显示的程序应my_program
。 此外,我怀疑该程序不会产生很多输出,例如少于4k。
问题在于,大多数实现对标准输出的缓冲取决于它是指向“控制台”还是其他东西:当写入控制台输出时,它倾向于行缓冲,而其他目标则缓冲更大的缓冲。 但是,可以显式刷新缓冲区,从而大大降低输出的性能。 当然,在上述情况下,您会对及时输出而不是输出性能更感兴趣。
在C ++中刷新输出缓冲区的一种简单方法是使用out << std::flush
。 如果您想快速验证这一问题,则可以使用out << std::unitbuf
将流设置为在每次输出操作后刷新。 有许多其他方法可以自动刷新,但是这些方法涉及更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.