2016-03-10 64 views
0

我想找到能夠向我解釋這個的人。我有這樣的程序:C函數fork()

int main(int argc, char *argv[]){ 
    printf("P "); 
    if(fork()==0) 
    printf("C "); 
    return 0; 
} 

這個方案的結果:P PÇ

什麼是對於第二個「P」的原因是什麼?

回答

3

IO緩衝是原因。 printf不是立即打印文本,而是等待換行,fflush或程序的結尾實際打印它。但是「將來打印」文本的緩衝區位於內存中,並且被fork重複,因此兩個進程都會收到它。最後兩個都在印刷它。

+0

所以,當我做叉,在緩衝區中保持「P」,所以當我prinf(「C」)他使他們兩個都不足? –

+0

是的。嘗試在'P'後添加'\ n',行爲應該改變。 –