C標準I/O緩衝區:全緩衝和行緩衝

ISO C標準I/O提供了全緩衝和行緩衝shell

全緩衝:在進行I/O操做時,只有當I/O緩衝區被填滿時,才進行真正的I/O操做。因此對於全緩衝的緩衝區可由標準I/O例程自動刷新,即當緩衝區填滿時,還有一種方法就是調用函數fflush進行刷新。函數

行緩衝:在I/O操做時,輸入輸出遇到換行符時進行,進行真正的I/O操做。對於行緩衝,標準I/O每一行緩衝區的長度是固定的,因此只要填滿了緩衝區,即便沒有遇到換行符,也換刷新緩衝區。進程

固然標準I/O還提供了不帶緩衝的類型,就是不對字符進行緩衝操做。終端

那麼全緩衝和行緩衝都用在I/O操做的哪些地方呢。方法

ISO C要求:di

  • 當且僅當標準輸入和輸出不涉及交互式設備(終端設備)時,它們纔是全緩衝。
  • 標準出錯不是全緩衝。

可是這並無告訴咱們當涉及到交互式設備時,標準輸入輸出是行緩衝仍是不帶緩衝,以及標準出錯時行緩衝仍是不帶緩衝。不少系統(FreeBSD,Linux,Mac OS,Solaris)默認使用下面類型緩衝:文件

  • 若是標準輸入輸出涉及終端設備,則它們是行緩衝,不然是全緩衝。
  • 標準出錯不帶緩衝。

咱們都知道shell爲每一個進程都定義了三個文件描述符:0,1,2。這三個文件描述符分別與進程的標準輸入,標準輸出和標準出錯輸出相關聯。在unistd.h頭文件中這三個常量分別替換成STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO符號。在ISO C中分別對應與stdin,stdout,stderr。字符

相關文章
相關標籤/搜索