2014-09-25 71 views
-2

測試fork函數與printf的組合,我發現了一些奇怪的行爲Ç - 叉和printf行爲

例如,代碼:

int main(){ 
    if(fork()==0){ 
      printf("TestString"); 
    } 
} 

不會打印出任何東西,而

int main(){ 
    if(fork()==0) { 
    printf("TestString\n"); 
    } 
} 

正確打印出TestString。爲什麼打印新行會改變行爲?我懷疑它可能會用fflush()做些什麼,但我不確定。我可以得到和解釋或鏈接,我可以讀它嗎?預先感謝您的答覆。

編輯:我正在尋找的解釋是什麼實際上是沖洗,爲什麼是\沖洗相同。

+0

是的,你需要使用'fflush(stdout)'或者使用換行符就像你所做的那樣。 – user1336087 2014-09-25 07:52:02

+0

printf被緩衝,當遇到換行符'\ n'時會顯示緩衝區的內容。清除意味着清除與printf相關聯的緩衝區的內容。 我測試了這段代碼,它在兩種情況下都會打印「TestString」。 – 2014-09-25 07:56:48

回答

0

在Linux(至少)上,stdout行緩衝。這意味着在遇到'\n'之前,您寫入的任何內容都不會實際出現在屏幕上。如果你不喜歡這種行爲,你可以用setbuf()來改變緩衝策略,但是一旦你的程序啓動(當然,實際上在任何寫入流之前)你必須這樣做,或者當你想要刷新時調用fflush()緩衝區內容,如你所說。

請記住,當程序結束並且其打開的流自動關閉時,緩衝區也會被刷新。