以下代码:
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
) 禁用缓冲(
setbuf
,setvbuf
)setvbuf(stdout, NULL, _IONBF, 0); /* this will disable buffering for stdout */
如果这些都不起作用,那么要么是其他东西在做缓冲,要么缓冲不是问题。
关于c - C 中的刷新输出缓冲区 (cgi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282557/