以下代码:
int z = 0;
while(z < 4)
{
printf("iteration %d\n",z);
sleep(1);
z++;
}
正常工作,如果从命令行运行程序,则每秒刷新stdout缓冲区。但是,当我尝试在Web浏览器中访问该程序时(服务器 - linux上的apache,通过cgi处理的已编译的可执行文件(使用gcc)),内容仅在4秒后显示,而不是“一步一步”。我正在寻找像PHP ob_flush()
这样的东西。 顺便说一下,cgi是处理编译的C可执行文件的最佳方式吗?
更新: 停用fflush(stdout)
和setvbuf(stdout, NULL, _IONBF, 0)
都无效!!! mod_deflate
后效果很好。
答案 0 :(得分:3)
我不太确定我是否理解你的问题,但在C中你可以
fflush
)禁用缓冲(setbuf
,setvbuf
)
setvbuf(stdout, NULL, _IONBF, 0); /* this will disable buffering for stdout */
如果这些不起作用,那么其他任何东西都在做缓冲或缓冲不是问题。
答案 1 :(得分:2)
您可以在stdout
之后尝试fflush
printf
。