C言語編 標準ライブラリのリファレンス setvbuf

先頭へ戻る

setvbuf関数

概要 ストリームに、バッファを設定する。
ヘッダ stdio.h
形式 int setvbuf(FILE* stream, char* buf, int mode, size_t size);
引数 stream 対象のストリーム。
buf バッファとして使用する配列を指すポインタ。
ヌルポインタを指定した場合は、関数内部で自動的に確保される(setbuf関数の引数buf とは意味が異なることに注意)
mode バッファリングの形式。_IOFBF_IOLBF_IONBF のいずれかを指定する。
size バッファの大きさ。
戻り値 成功したら 0、失敗したら 0以外が返される。
詳細 指定ストリームにバッファを設定する。引数mode に指定した値に応じて、3通りのバッファリングが設定できる。
引数buf に配列を指すポインタを指定すると、その配列をバッファ領域として使用する。この配列は、引数size 以上の大きさを持っていなければならない。
引数buf にヌルポインタを指定した場合は、内部でバッファを確保する。その際の大きさは、引数size の値が使われる。また、そのバッファの状態は不定である。
この関数を呼ぶタイミングは、対象のストリームがオープンされてから、そのストリームに対する何らかの操作が実行されるまでの間でなければならない。
なお、ストリームの種類ごとにデフォルトのバッファリング設定がなされているが、これは環境によって異なる。例えば、標準出力ストリームはバッファリングされており、標準エラーストリームはバッファリングされていないことが多いが、これも環境依存の可能性がある。こういったデフォルトの設定を変更したい場合に、この関数が使用できる。
注意 引数buf に配列を指定した場合は、対象のストリームを使用している間、その配列が存在し続けなけばならない。
使用例
#include <stdio.h>

int main(void)
{
    char buf[80];
    char stdoutBuf[BUFSIZ];


    /* ラインバッファリングを行う */
    setvbuf( stdout, stdoutBuf, _IOLBF, sizeof(stdoutBuf) );

    printf( "文字列を入力して下さい" ); /* 改行なし */
    fgets( buf, sizeof(buf), stdin );
    printf( "入力内容:%s\n", buf );


    /* バッファリング無しに変更 */
    setvbuf( stdout, NULL, _IONBF, BUFSIZ );

    printf( "文字列を入力して下さい" ); /* 改行なし */
    fgets( buf, sizeof(buf), stdin );
    printf( "入力内容:%s\n", buf );

    return 0;
}

実行結果:

Hello
文字列を入力して下さい入力内容:Hello

文字列を入力して下さいHello
入力内容:Hello
関連 より単純な setbuf関数がある。
解説章 第43章


参考リンク

更新履歴

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/15 全体的に文章を見直し修正。

'2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

'2018/1/22 新規作成。





標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS