table of contents
other languages
SETBUF(3) | Linux Programmer's Manual | SETBUF(3) |
NAME¶
setbuf, setbuffer, setlinebuf, setvbuf - 流緩沖操作SYNOPSIS 總覽¶
#include <stdio.h> void setbuf(FILE *stream, char *buf);DESCRIPTION 描述¶
有三種類型的緩沖策略,它們是無緩沖,塊緩沖和行緩沖。當輸出流無緩沖時,信息在寫的同時出現於目標檔案或終端上;當是塊緩沖時,字符被暫存,然後一起寫入;當是行緩沖時,字符被暫存,直到要輸出一個新行符,或者從任何與終端設備連接的流中 (典型的是 stdin) 讀取輸入時才輸出。函數 fflush(3) 可以用來強制提前輸出。(參見 fclose(3)) 通常所有檔案都是塊緩沖的。當檔案 I/O 操作在檔案上發生時,將調用 malloc(3) ,獲得一個緩沖。如果流指向一個終端 (通常 stdout 都是這樣),那麼它是行緩沖的。標準錯誤流 stderr 預設總是無緩沖的。 函數 setvbuf 可以用在任何打開的流上,改變它的緩沖。參數 mode 必須是下列三個宏之一:- _IONBF
- 無緩沖
- _IOLBF
- 行緩沖
- _IOFBF
- 完全緩沖
setvbuf(stream, buf, buf ? _IOFBF : _IONBF,
BUFSIZ);
函數 setbuffer
與此相同,但是緩沖的長度由使用者決定,而不是由預設值
BUFSIZ 決定。函數 setlinebuf
與使用下列語句完全等價:
setvbuf(stream, (char *)NULL, _IOLBF, 0);
RETURN VALUE 返回值¶
函數 setvbuf 成功執行時返回 0。它失敗時可能返回任何值,但是當 It can return any value on failure, but returns nonzero when mode 不正確,或者不能實現請求時,必須返回非零值。它在失敗時可能設置 errno 。其他函數沒有返回值。CONFORMING TO 標準參考¶
函數 setbuf 和 setvbuf 遵循 ANSI X3.159-1989 (``ANSI C'') 標準。BUGS¶
函數 setbuffer 和 setlinebuf 無法移植到 4.2BSD 之前的 BSD 版本,在 Linux 中僅在 libc 4.5.21 之後的系統中可用。在 4.2BSD 和 4.3BSD 系統中, setbuf 總是使用非最優的緩沖大小,應當避免使用它。 在 stream 被關閉時,必須確保 buf 和它指向的空間仍然存在。這通常發生在程式終止時。 例如,下列調用是非法的:#include <stdio.h> int main() { char buf[BUFSIZ]; setbuf(stdin, buf); printf("Hello, world!\n"); return 0; }
SEE ALSO 參見¶
fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)2001-06-09 | Linux |