在C(cgi)中刷新输出缓冲区

时间:2011-06-08 17:10:07

标签: c cgi buffer stdout

以下代码:

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后效果很好。

2 个答案:

答案 0 :(得分:3)

我不太确定我是否理解你的问题,但在C中你可以

  • 每次打印(fflush
  • 后冲洗
  • 禁用缓冲(setbufsetvbuf

    setvbuf(stdout, NULL, _IONBF, 0); /* this will disable buffering for stdout */
    

如果这些不起作用,那么其他任何东西都在做缓冲或缓冲不是问题。

答案 1 :(得分:2)

您可以在stdout之后尝试fflush printf