名前空間
変種
操作

std::setbuf

提供: cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
ヘッダ <cstdio> で定義
void setbuf( std::FILE* stream, char* buffer );

C のストリーム stream に対する入出力操作のために使用するための内部バッファを設定します。

buffer がヌルでない場合は、 std::setvbuf(stream, buffer, _IOFBF, BUFSIZ) と同等です。

buffer がヌルの場合は、 std::setvbuf(stream, NULL, _IONBF, 0) と同等です。 これはバッファリングを無効化します。

目次

[編集] 引数

stream - バッファを設定するファイルストリーム
buffer - 使用するストリームのためのバッファを指すポインタ。 NULL が指定された場合、バッファリングは無効化されます。 ヌルでない場合、少なくとも BUFSIZ 文字を保持できなければなりません

[編集] 戻り値

(なし)

[編集] ノート

BUFSIZ が適切なバッファサイズでない場合は、それを変更するために std::setvbuf を使用することができます。

std::setbuf は成功失敗を示さないため、エラーを検出するためにも std::setvbuf を使用するべきです。

この関数は stream が開いているファイルに紐付けられた後、しかしいかなる他の操作も行われる前 (失敗した std::setbuf/std::setvbuf を除く) にのみ、使用することができます。

よくある間違いは、 stdin や stdout のバッファをプログラム終了前に生存期間が終了する配列に設定することです。

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

[編集]

直ちに出力することが求められるストリームのバッファリングを無効化するために setbuf を使用することができます

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

出力:

ab

[編集] 関連項目

ファイルストリームのためのバッファとそのサイズを設定します
(関数) [edit]