名稱空間
變體
操作

std::setbuf

來自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
定義於標頭檔案 <cstdio>
void setbuf( std::FILE* stream, char* buffer );

為 C 流 stream 上執行的 I/O 操作設定內部緩衝區。

buffer 非空,則等價於 std::setvbuf(stream, buffer, _IOFBF, BUFSIZ)

buffer 為空,則等價於 std::setvbuf(stream, nullptr, _IONBF, 0),這會關閉緩衝。

目錄

[編輯] 引數

stream - 要設定緩衝區的檔案流
buffer - 指向流要使用的緩衝區的指標。若提供空指標,則關閉緩衝。若非空,必須至少能容納 BUFSIZ 個字元。

[編輯] 返回值

(無)

[編輯] 注意

BUFSIZ 不是合適的緩衝區大小,可以使用 std::setvbuf 來更改它。

std::setvbuf 也應該用於檢測錯誤,因為 std::setbuf 不指示成功或失敗。

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

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

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

[編輯] 示例

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

#include <chrono>
#include <cstdio>
#include <thread>
 
int main()
{
    using namespace std::chrono_literals;
 
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

輸出

ab

[編輯] 參閱

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