2010-07-08 46 views
0

你好,我是CGI编程C新手。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); 
    }  
} 

问题在于它不打印,直到整个事情完成。我怎样才能让事情按照他们在终端上打印的方式进行?

回答

1

您需要显式刷新输出流。当你的程序输出被重定向(例如文件或其他程序的输入)时,它只会在输出缓冲区(通常为4-64 KB左右)填满时才被周期性地刷新。

要刷新标准输出,只需调用fflush(3)

if((l%30) == 0) { 
    printf("\n"); 
    fflush(stdout); 
} 

注意,当输出去一个终端(例如,如果你只是跑你的程序正常),则默认情况下它是行缓冲 :每次打印换行符时,输出都会被刷新。这使交互式程序更容易编写,但降低了非交互式程序的性能。刷新的频率越高,程序执行的速度越慢,因此只能在必要时进行刷新,例如在执行长时间密集任务之前编写一个长连贯的数据集。

+0

感谢您的回复。我实现了你所说的(这只是一个练习程序),但它仍然无法工作。我怀疑现在可能stdout不是刷新的流,即使我相信我已经读过流如stdout直接通过CGI编程的线。 给我一些东西来找出我自己的东西,但感谢您在正确的方向微调。非常感谢! – user386156 2010-07-08 02:03:54