setbuf | Programming Place Plus C言語編 標準ライブラリのリファレンス

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

先頭へ戻る

setbuf関数

概要 ストリームに、バッファを設定する。
ヘッダ stdio.h
形式 void setbuf(FILE* stream, char* buf);
引数 stream 対象のストリーム。
buf バッファとして使用する配列のメモリアドレス。その配列は BUFSIZ以上の大きさを持たなければならない。
あるいはヌルポインタを指定する。この場合、バッファリングしない。
戻り値 なし
詳細 指定ストリームにバッファを設定する。
引数buf に配列を指すポインタを指定すると、その配列をバッファ領域として使用する。この配列は、BUFSIZ の置換結果以上の大きさを持っていなければならない。
引数buf にヌルポインタを指定した場合は、バッファリングを行わない。
この関数を呼ぶタイミングは、対象のストリームがオープンされてから、そのストリームに対する何らかの操作が実行されるまでの間でなければならない。
なお、ストリームの種類ごとにデフォルトのバッファリング設定がなされているが、これは環境によって異なる。例えば、標準出力ストリームはバッファリングされており、標準エラーストリームはバッファリングされていないことが多いが、これも環境依存の可能性がある。こういったデフォルトの設定を変更したい場合に、この関数が使用できる。
注意 引数buf に配列を指定した場合は、対象のストリームを使用している間、その配列が存在し続けなけばならない。
使用例
#include <stdio.h>

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


    /* バッファリングを行う */
    setbuf( stdout, stdoutBuf );

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


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

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

    return 0;
}

実行結果:

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

文字列を入力して下さいHello
入力内容:Hello
関連 setvbuf関数の方が、より詳細な指定が行える。
解説章 第43章


参考リンク



更新履歴

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

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

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

'2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ


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