Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
ヘッダーで定義 <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);
} // bufの寿命が終了、未定義動作

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

関連項目

ファイルストリームのバッファとそのサイズを設定する
(関数)