Provided by: manpages-zh_1.5.2-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);

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

       函數    setvbuf     可以用在任何打開的流上,改變它的緩沖。參數     mode
       必須是下列三個宏之一:

              _IONBF 無緩沖

              _IOLBF 行緩沖

              _IOFBF 完全緩沖

       除非是無緩沖的檔案,否則參數     buf     應當指向一個長度至少為    size
       字節的緩沖;這個緩沖將取代當前的緩沖。如果參數     bufNULL
       ,只有這個模式會受到影響;下次          read          或          write
       操作還將分配一個新的緩沖。函數                                  setvbuf
       只能在打開一個流,還未對它進行任何其他操作之前使用。

       其他三個函數調用是函數        setvbuf        的別名,函數        setbuf
       與使用下列語句完全等價:

              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 標準參考
       函數 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)