簡體   English   中英

為什么這段帶有fork()的代碼只能產生一個輸出?

[英]Why does this code with fork() only produce one output?

為什么此代碼片段僅產生字母“ XUVUV”? 我認為“ UXUVV”也是可能的,但我從來沒有得到過輸出。

if (fork() == 0){
    printf("X");
}

printf("U");
wait(NULL);
printf("V");

沒有印刷換行符; 因此,直到該過程終止之前,不會出現任何輸出。

子進程將X添加到其緩沖區; 父級不打印X 然后,孩子將U添加到其緩沖區中。 它等待,但是等待立即返回。 這個孩子沒有孩子等待。 它將V添加到其緩沖區。 它終止,因此XUV被沖洗了。

同時,父級已將U添加到其緩沖區中; 然后它等待孩子完成。 孩子完成后,就已經打印了XUV 父級將V添加到其緩沖區並退出; UV被沖洗至輸出。

結果是您每次都看到XUVUV

您無法確定孩子是在父級將其U添加到其緩沖區之前還是之后將其字符添加到其緩沖區中,但是您確實知道孩子在父級將其添加到V之前已經完成了,因此除非您執行某些操作,否則輸出是確定的喜歡setvbuf(stdout, 0, _IONBF, 0)使標准輸出在執行任何輸出操作之前沒有緩沖。

如果在每個打印操作中添加換行符,事情將會變得更加復雜。 時間不再是確定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM