名前空間
変種
操作

std::setbuf

From cppreference.com
< cpp‎ | io‎ | c
 
 
 
C形式I/O
型とオブジェクト
関数
ファイルアクセス
setbuf

直接入出力
非書式化入出力
書式付き入力
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
書式付き出力
ファイルポジショニング
エラーハンドリング
ファイル操作
 
ヘッダ<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

[編集] 関連項目

ファイルストリームのバッファとそのサイズを設定する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)