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

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

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


setbuf関数

概要

ストリームに、バッファを設定する。

ヘッダ

stdio.h

形式

void setbuf(FILE* stream, char* buf);

引数

stream

対象のストリーム。

buf

バッファとして使用する配列のメモリアドレス。その配列は BUFSIZ以上の大きさを持たなければならない。
あるいはヌルポインタを指定する。この場合、バッファリングしない。

戻り値

なし

詳細

指定ストリームにバッファを設定する。

引数buf に配列を指すポインタを指定すると、その配列をバッファ領域として使用する。この配列は、BUFSIZ の置換結果以上の大きさを持っていなければならない。

引数buf にヌルポインタを指定した場合は、バッファリングを行わない。

この関数を呼ぶタイミングは、対象のストリームがオープンされてから、そのストリームに対する何らかの操作が実行されるまでの間でなければならない。

なお、ストリームの種類ごとにデフォルトのバッファリング設定がなされているが、これは環境によって異なる。たとえば、標準出力ストリームはバッファリングされており、標準エラーストリームはバッファリングされていないことが多いが、これも環境依存の可能性がある。こういったデフォルトの設定を変更したい場合に、この関数が使用できる。

注意

引数buf に配列を指定した場合は、対象のストリームを使用している間、その配列が存在し続けなけばならない。

使用例

#include <stdio.h>

int main(void)
{
    char stdout_buf[BUFSIZ];

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

    char buf[80];
    printf("文字列を入力してください"); // 改行なし
    fgets(buf, sizeof(buf), stdin);
    printf("入力内容:%s\n", buf);


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

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

実行結果:

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

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

関連

setvbuf関数の方が、より詳細な指定が行える。

解説章

第43章


参考リンク


更新履歴

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

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

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

’2018/1/22 新規作成。



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

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

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る