2010-07-08 52 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