Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
定義先ヘッダ <stdio.h>
void setbuf ( FILE * stream, char * buffer ) ;
(C99まで)
void setbuf ( FILE * restrict stream, char * restrict buffer ) ;
(C99以降)
#define BUFSIZ /*unspecified*/

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

buffer がnullでない場合、以下と等価です: setvbuf ( stream, buffer, _IOFBF , BUFSIZ )

buffer がnullの場合、 setvbuf ( stream, NULL , _IONBF , 0 ) と同等であり、バッファリングを無効にします。

目次

パラメータ

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

戻り値

なし。

注記

BUFSIZ が適切なバッファサイズでない場合、 setvbuf を使用して変更することができます。

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

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

よくあるエラーは、stdinまたはstdoutのバッファを、プログラム終了前に寿命が切れる配列に設定することです:

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // bufの寿命が終了、未定義動作

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

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.21.5.5 setbuf関数 (p: 225)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.21.5.5 setbuf関数 (p: 307-308)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.19.5.5 setbuf関数 (p: 273)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.9.5.5 setbuf関数

関連項目

ファイルストリームのバッファとそのサイズを設定する
(関数)