我們知道,標準緩衝提供緩衝的目的 是 儘可能減少使用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環境高級編程》
緩衝機制
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
gcc, vc 編譯輸出頭文件包含順序
hylaking
2020-07-07 12:48:50
CentOS 7中建lxc-sshd容器, 報告2260 unknown capability sys_module問題的解決
hylaking
2020-06-26 06:10:25
交叉編譯iproute2網絡管理工具
hylaking
2020-06-26 06:10:25
跨平臺編程之Windows模擬Linux dirent API
hylaking
2020-06-26 06:10:25
sleep, usleep 函數延時的問題
hylaking
2020-05-22 07:17:14
嵌入式arm開發C語言調用棧回溯實戰
hylaking
2020-05-14 19:04:26
詭異的sqlite3之malformed錯誤(一)
hylaking
2020-02-22 10:38:20
讓Linux內核支持AUFS文件系統
hylaking
2019-09-15 23:19:42
memcmp&strcmp
fang189797
2018-09-01 09:30:31