緩衝機制

     我們知道,標準緩衝提供緩衝的目的 是 儘可能減少使用posix.1的read,write函數調用次數。
     標準I/O庫提供了三種類型的緩衝:
     1 全緩衝:
        在填滿I/O緩衝後才進行實際I/O操作。(讀寫磁盤屬於此類緩衝,用來避免重複擦寫磁盤扇區的次數)。flush說明標準I/O緩衝區的寫操作。
    2 行緩衝:
       當輸入和輸出中遇到換行時,標準I/O庫執行I/O操作。這允許我們一次輸出一個字符(用標準I/O fputc函數),但是隻有些了一行之後才進行實際I/O操作。(當流涉及一個終端時,如標準輸入和標準輸出,通常使用行緩衝)
    3 不帶緩衝:
       標準I/O庫不對字符進行緩衝儲存。(即直接寫入流)

    下列函數用於更改緩衝類型:
     #include<stdio.h>
    void setbuf(FILE *restict fp,char *restrict buf);
    int setvbuf(FILE *restrict fp,char *restrict buf,int mode,size_t size);
    返回值:若成功則返回0,若出錯則返回非0值
    setbuf函數打開或關閉緩衝機制。爲了帶緩衝進行I/O,參數buf必須指向一個長度爲BUFSIZ(stdio.h頭文件中定義)。通常在此之後流就是全緩衝的,爲了關閉緩衝,將buf設置buf爲NULL
    setvbuf函數,可以精確地指出所需的緩衝類型。這是用mode參數實現的。
    _IOFBF   全緩衝
    _IOLBF   行緩衝
    _IONBF   不帶緩衝
    如果設定_IONBUF的情況下,忽略buf和size參數設定。如果設定帶緩衝的,而buf爲NULL那麼標準I/O將自動地爲該流分配適當長度的緩衝區,根據BUFSIZ定義。


                                                                                                                                                             《unix環境高級編程》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章