uinx環境高階程式設計 第三版
#includeint globvar =6;
char buf = "a write to stdout\n";
int main(void)
else
sleep(2);
printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar, var);
exit(0);
}
./a.out
執行結果
a write to stdout
before fork
pid = 430, glob = 7, var = 89
pid = 429, glob = 6, var = 88
a.out > temp.out
執行結果
a write to stdout
before fork
pid = 432, glob = 7, var = 89
before fork
pid = 421, glob = 6, var = 88
為什麼指定到具體檔案中會多出before fork 而buf內容不多出呢?
1.write函式是不帶緩衝的。因為在fork之前呼叫write,所以資料寫到標準輸出一次。但是,標準i/o庫是帶緩衝的。如果標準輸出連線到終端裝置,則它是行緩衝的;否則他是全緩衝的。 當以互動方式執行該程式時,只得到該printf的一次輸出,其原因是標準輸出緩衝區由換行符沖洗。但是將標準輸出定向到乙個檔案的時候,輸出printf確實兩次,其原因是,在fork之前呼叫了一次printf,但當呼叫fork時候,該行資料還是在緩衝區,然後在將父程序資料空間複製到子程序的資料空間的時候,該緩衝區也被複製到子程序中,此時父程序和子程序都有帶改行的緩衝區,在exit之前的第二個printf將該行追加到已有的緩衝區中。在程序結束時,其緩衝區的內容都被寫到對應的檔案中。
fork 函式 fork 函式的使用
fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...
c 中的fork函式 FORK()函式
乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。然後把原來的程序的所有...
system,popen函式與fork的區別
說明 system函式在執行的過程中經過fork exec wait,但system在執行的過程中會一直等待,直到shell執行完才退出,所以system為序列執行 system在執行的過程中對sigchld sigint sigquit都做了處理 sigchld是子程序在退出的時候給父程序發的乙個...