關於"三種緩衝"的學習

          “緩衝”知識的補充

          在週三的時候,學姐講了進程方面的知識,不過對於某一個程序用到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流等,然後進入內核。



發佈了30 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章