std::setbuf
來自 cppreference.com
定義於標頭檔案 <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 呼叫)之前使用。
一個常見的錯誤是將 stdin 或 stdout 的緩衝區設定為在其生命週期在程式終止前結束的陣列。
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
|