[英]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.