Provided by: manpages-zh_1.5.1-1_all bug

NAME

       setbuf, setbuffer, setlinebuf, setvbuf - 流緩沖操作

SYNOPSIS`覽
       #include <stdio.h>

       void setbuf(FILE *stream, char *buf);
       void setbuffer(FILE *stream, char *buf, size_t size);
       void setlinebuf(FILE *stream);
       int setvbuf(FILE *stream, char *buf, int mode , size_t size);

DESCRIPTIONyz
       有三種類型的緩沖策略,它-
       怓O無緩沖,塊緩沖和行緩沖。當輸出流無緩沖時,信息在寫的同時出現於目標檔案或終端上;當是塊緩沖時,字符被暫存,然後一起寫入;當是行緩沖時,字符被暫存,直到-
       n輸出一虓s行符,或者從任何與終端設備連接的流中     (典型的是     stdin)
       讀取輸入時才輸出。函數 fflush(3) 可以用來強制提前輸出。(參見 fclose(3))
       通常所有檔案都是塊緩沖的。當檔案     I/O     操作在檔案上發生時,將調用
       malloc(3)      ,獲得一蚑w沖。如果流指向一茞袟      (通常       stdout
       都是這樣),那麼它是行緩沖的。標準錯誤流 stderr 預設總是無緩沖的。

       函數     setvbuf     可以用在任何打開的流上,改變它的緩沖。參數    mode
       必須是下列三荍誘坐@:

              _IONBF 無緩沖

              _IOLBF 行緩沖

              _IOFBF 完全緩沖

       除非是無緩沖的檔案,否則參數     buf     應當指向一茠曮蛈雂眲     size
       字節的緩沖;這蚑w沖將取代當前的緩沖。如果參數  bufNULL  ,只有這-
       蚍狾◎|受到影響;下次  read  或   write   操作還將分配一虓s的緩沖。函數
       setvbuf 只能在打開一茯y,還未對它進行任何其他操作之前使用。

       其他三茖蝻掍峎O函數         setvbuf        的別名,函數        setbuf
       與使用下列語句完全等價:

              setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

       函數   setbuffer    與此相同,但是緩沖的長度由使用者決定,而不是由預設
       BUFSIZ 決定。函數 setlinebuf 與使用下列語句完全等價:

              setvbuf(stream, (char *)NULL, _IOLBF, 0);

RETURN VALUE^
       函數  setvbuf  成弘鶡畾阞藀^  0。它失敗時可能返回任何A但是當  It  can
       return  any  value  on  failure,  but   returns   nonzero   when   mode
       不正確,或者不能實現請求時,必須返回非零C它在失敗時可能設置     errno
       。其他函數沒有返回C

CONFORMING TO考
       函數 setbufsetvbuf 遵循 ANSI X3.159-1989 (``ANSI C'') 標準。

BUGS

       函數 setbuffersetlinebuf  無法移植到  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)