名前空間
変種
操作

setbuf

From cppreference.com
< c‎ | io
 
 
ファイル入出力
型とオブジェクト
        
関数
ファイルアクセス
(C95)
非書式化入出力
(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以降)
#define BUFSIZ     /*unspecified*/

ストリーム操作に使用する内部バッファを設定します。BUFSIZ 文字以上である必要があります。

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

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

目次

[編集] パラメータ

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

[編集] 戻り値

なし。

[編集] 注釈

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

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

この関数は、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

[編集] 参考文献

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

[編集] 関連項目

ファイルストリームのバッファとそのサイズを設定する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)