“緩衝”知識的補充
在週三的時候,學姐講了進程方面的知識,不過對於某一個程序用到return 和 exit 之後使得父子進程輸出數據的結果是隨機的這一問題的講解,我還是有些疑惑。
晚上組長過來了解我學習情況,我說出了自己對這個問題的疑惑,然後組長以自己“Understanding Learning”的態度,給我普及了一下“緩衝機制”。
緩衝機制有三種,分別爲:
1> 全緩衝:他指的是系統在填滿標準IO緩衝區之後,才進行實際的IO操作;需要注意的是:對於駐留在磁盤上的文件來說,通常是由標準IO庫實施全緩衝。組長特別強調它與行緩衝的區別在於:是否與人進行交互。
2> 行緩衝:在這種情況下,標準IO在輸入和輸出中遇到換行符時執行IO操作;需要注意的是:當流涉及終端時,通常使用行緩衝(即進行人機交互時)。
3> 無緩衝:他指的是標準IO庫不對字符進行緩衝存儲;需要注意的是:標準出錯流stderr( ) 和 write( ) 通常是無緩衝的。
這裏提一下這幾個退出函數,畢竟是由他們所引起的問題思考:
1> return ( ) : 是當前函數的返回,當然如果是在主函數main,自然就結束當前進程啦,如果不是,那就是退回上一層調用。在多個進程時,如果有時要檢測上進程是否正常退出的,就要用到上個進程的返回值,以此類推。
2> exit ( ) : 用來正常終結目前進程的執行,並把參數status返回給父進程,而進程所有的緩衝數據會自動寫回並關閉未關閉的文件。void exit ( int status );exit ( )結束當前進程/當前程序,在整個程序中,只要調用exit就會結束。
3> _exit () : 主要區別於exit (),因爲相比於exit ()函數,它不進行清理工作而直接進入內核。而exit函數調用之後先進性一系列的清理處理,包括調用執行各終止處理程序,關閉所有標準IO流等,然後進入內核。