我嘗試學習函式 fork()。但是,在 VScode 中使用 Code Runner 執行的結果與在 shell 中執行的結果不同。就像爆炸圖片顯示,我使用相同的命令但得到不同的結果。我知道 shell 中的第二個輸出是正確的,我想知道為什么使用 Code Runner 列印第一個輸出?插件有問題嗎?
代碼是這樣的。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
printf("Hello World\n");
fork();
fork();
fork();
exit(0);
}


uj5u.com熱心網友回復:
這是一個緩沖問題。
當stdout連接到實際終端時,它將被行緩沖這意味著當緩沖區已滿、顯式重繪 或列印換行符 ( '\n') 時,輸出實際上被寫入終端。
這是在第二種情況下發生的情況。
在第一種情況下,VSCode 不會直接在終端中運行它,而是stdout連接到管道,然后 VSCode 將在其“終端”中輸出。當連接到管道(或任何其他非直接終端)時,stdout將被完全緩沖,只有當緩沖區已滿或顯式重繪 時才會重繪 輸出。
在第一種情況下,緩沖區stdout將由子行程繼承,因此每個子行程都fork將擁有自己的現有緩沖區副本。當每個子行程退出時,它們的緩沖區將被重繪 并實際寫入。由于總共有八個行程在運行,因此您將獲得八次輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/454166.html
