您好我是C语言中CGI编程的新手。
根据标题,我要做的是动态打印。例如,考虑一下打印出一堆数字的代码:
int main()
{
long int l=0;
printf("Content-Type: text/plain;charset=us-ascii\n\n");
while(1)
{
printf("%li ", l);
if ((l%30) == 0)
printf("\n");
if (l == 5000)
exit(1);
++l;
usleep(3000);
}
}
它的问题是它不会打印,直到整个事情结束。我如何完全像在终端上那样进行打印?
答案 0 :(得分:1)
您需要显式刷新输出流。当程序的输出被重定向时(例如文件或另一个程序的输入,如本例所示),只有当输出缓冲区(通常为4-64 KB左右)填满时才会定期刷新。
要刷新标准输出,请拨打fflush(3)
:
if((l%30) == 0) {
printf("\n");
fflush(stdout);
}
请注意,当输出到达终端时(例如,如果您只是正常运行程序),那么默认情况下它是行缓冲:每次打印换行符时,输出都会得到酡。这使得交互式程序更容易编写,但会降低非交互式程序的性能。您刷新的频率越高,程序运行的速度就越慢,因此您应该只在必要时进行刷新,例如在编写一个长连贯的数据集之后但在执行长时间的密集任务之前。