檔案緩衝區

檔案緩衝區 -- 如何指定緩衝區大小與位址

在 C 語言的標準輸出入函式庫中,您可以使用 setbuf(file, buffer) 的方法,設定擋案的緩衝區,如果您用 setbuf(file, NULL) 這個函數將緩衝區設為 NULL,就會取消檔案緩衝機制,每次都直接輸出到檔案中。

另外,您也可以使用 setvbuf(file, buffer, mode, size) 這樣的方式,設定檔案緩衝區與緩衝模式,其中的 mode 有三種可能,第一種 _IOFBF 代表完全緩衝,該模式會等緩衝區滿了之後再輸出,第二種 _IOLBF 代表行緩衝 (line buffered),一但碰到換行時就會輸出,而第三種 _IONBF 代表不緩衝,該方法會完全不進行緩衝而直接輸出。

程式範例

檔案:setbuf.c

    #include <stdio.h>

    int main () {
      char buffer[BUFSIZ];  // BUFSIZ 定義在 stdio.h 當中。
      FILE *file;
      file=fopen ("test.txt","w");
      setbuf (file, buffer ); // setbuf(file, NULL) 會取消緩衝區,每次都直接輸出入。
      fclose (file);
      return 0;
    }

執行結果

D:\cp>gcc setbuf.c -o setbuf

D:\cp>setbuf

來自 jserv 的建議

這整章節沒有把 C 語言的溫床 — UNIX 背後的思維闡述好,希望能多談 standard I/O file,descriptors 的概念,以及 C standard library 提供哪些包裝,這樣探討 buffering 才有意思。