std::setbuf
From cppreference.com
| ヘッダ <cstdio>で定義 |
||
| void setbuf( std::FILE* stream, char* buffer ); |
||
Cストリーム stream に対して実行されるI/O操作に使用する内部バッファを設定します。
buffer がnullでない場合、std::setvbuf(stream, buffer, _IOFBF, BUFSIZ)と同等です。
buffer がnullの場合、std::setvbuf(stream, nullptr, _IONBF, 0)と同等であり、バッファリングを無効にします。
目次 |
[編集] パラメータ
| stream | - | バッファを設定するファイルストリーム |
| buffer | - | ストリームが使用するバッファへのポインタ。nullポインタが指定された場合、バッファリングは無効になります。nullでない場合、少なくとも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)
| |