名稱空間
變體
操作

setbuf

來自 cppreference.com
< c‎ | io
 
 
檔案輸入/輸出
型別和物件
        
函式
檔案訪問
(C95)
非格式化輸入/輸出
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

格式化輸入
 
定義於標頭檔案 <stdio.h>
void setbuf( FILE          *stream, char          *buffer );
(直到 C99)
void setbuf( FILE *restrict stream, char *restrict buffer );
(C99 起)
#define BUFSIZ     /*unspecified*/

設定用於流操作的內部緩衝區。它應該至少有 BUFSIZ 個字元長。

如果 buffer 不為 null,則等同於 setvbuf(stream, buffer, _IOFBF, BUFSIZ)

如果 buffer 為 null,則等同於 setvbuf(stream, NULL, _IONBF, 0),這會關閉緩衝。

目錄

[編輯] 引數

stream - 要設定緩衝區的檔案流
buffer - 指向流使用的緩衝區的指標。如果提供空指標,則關閉緩衝。

[編輯] 返回值

無。

[編輯] 注意

如果 BUFSIZ 不是適當的緩衝區大小,可以使用 setvbuf 來更改它。

還應該使用 setvbuf 來檢測錯誤,因為 setbuf 不指示成功或失敗。

此函式只能在 stream 與已開啟檔案關聯後使用,但要在任何其他操作之前(除了失敗的 setbuf/setvbuf 呼叫)。

一個常見的錯誤是將 stdin 或 stdout 的緩衝區設定為在其程式終止之前生命週期結束的陣列。

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior

[編輯] 示例

setbuf 可用於停用需要立即輸出的流的緩衝。

#include <stdio.h>
#include <threads.h>
 
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

輸出

ab

[編輯] 參考

  • C17 標準 (ISO/IEC 9899:2018)
  • 7.21.5.5 The setbuf function (p: 225)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.21.5.5 The setbuf function (p: 307-308)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.19.5.5 The setbuf function (p: 273)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 4.9.5.5 The setbuf function

[編輯] 另請參閱

為檔案流設定緩衝區及其大小
(函式) [編輯]
C++ 文件 for setbuf