名前空間
変種
操作

setbuf

提供: cppreference.com
< c‎ | io
 
 
ファイル入出力
型とオブジェクト
関数
ファイルアクセス
直接入出力
書式なし入出力
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)
書式付き入力
 
ヘッダ <stdio.h> で定義
void setbuf( FILE          *stream, char          *buffer );
(C99未満)
void setbuf( FILE *restrict stream, char *restrict buffer );
(C99以上)

ストリーム操作のために使用するための内部バッファを設定します。 少なくとも BUFSIZ 文字の長さであるべきです。

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

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

目次

[編集] 引数

stream - バッファを設定するファイルストリーム
buffer - 使用するストリームのためのバッファを指すポインタ。 NULL が指定された場合、バッファリングは無効化されます

[編集] 戻り値

(なし)

[編集] ノート

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

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

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

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

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

[編集]

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

#include <stdio.h>
#include <threads.h>
 
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

出力:

ab

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.5.5 The setbuf function (p: 307-308)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.19.5.5 The setbuf function (p: 273)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.9.5.5 The setbuf function

[編集] 関連項目

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