c - C 中的刷新输出缓冲区 (cgi)

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

最佳答案

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

  • 每次打印后刷新(fflush)
  • 禁用缓冲(setbufsetvbuf)

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

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

关于c - C 中的刷新输出缓冲区 (cgi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282557/

相关文章:

c - 如何获取 time_t 的最小/最大值(如果类型未知)

c - 在 C 中对客户结构进行排序

c - 在 apache 中作为 cgi 运行时如何获取请求信息?

ruby - 寻找一个简单的 ruby​​ 模板解决方案

python - 如何将 select 与 Python ssl 套接字缓冲一起使用?

c - 全缓冲流在未满时被刷新

c - 循环缓冲区的结束指针问题

c - 头文件中声明的外部变量的链接器出错

转换字符和 fgets() 函数未按预期工作

delphi - 在使用 IIS7 的 Delphi CGI 上无法看到 WSDL