other versions
other languages
SETBUF(3) | Linux Programmer's Manual | SETBUF(3) |
名前¶
setbuf, setbuffer, setlinebuf, setvbuf - ストリームのバッファリングの操作書式¶
#include <stdio.h> void setbuf(FILE *stream, char *buf); void setbuffer(FILE *stream, char *buf, size_t size); void setlinebuf(FILE *stream); int setvbuf(FILE *stream, char *buf, int mode, size_t size);
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
setbuffer(), setlinebuf(): _BSD_SOURCE
説明¶
バッファリングには unbuffered, block buffered, line buffered の3つのタイプが ある。出力ストリームのタイプが unbuffered の場合、データを書き込むとすぐに出 力先ファイルに書き込まれるかターミナルに表示される。block buffered の場合、文 字の読み書きはブロック単位でいっぺんに行われる。line buffered の場合、 新しい行が出力されるか、ターミナルデバイスに接続しているストリーム (通常、 stdin) から新しい行が入力されるまで文字がたくわえられる。 ブロックを強制的に出力するには fflush(3) 関数を使う。 ( fclose(3) を参照のこと) 通常、ファイルはすべて block buffered である。ファイルに対して 初めて入出力処理を行うと malloc(3) が呼び出されバッファが獲得される。もし ストリームが (通常、 stdout がそうであるように) ターミナルを参照する場合には、ファイルは line buffered と なる。標準エラー出力 stderr はデフォルトでは常に unbuffered である。 setvbuf() 関数は、オープンしている任意のストリームに対してバッファを変更できる。 引き数 mode は、次の 3 つのマクロのうちいずれかである:- _IONBF
- unbuffered
- _IOLBF
- line buffered
- _IOFBF
- fully buffered
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
と全く同等だし、 setbuffer() 関数は、バッファサイズがデフォルト値 BUFSIZ ではなく引数で与えられる点以外は同じである。 setlinebuf() 関数は以下と同じである。
setvbuf(stream, NULL, _IOLBF, 0);
返り値¶
setvbuf() 関数は、成功した場合 0 を返す。 失敗した場合、0 以外の値を返す (失敗とは、 mode が不正な場合またはリクエストが条件を満たさない場合である)。 setvbuf() 関数が失敗した場合は errno を設定することもある。 その他の関数は値を返さない。属性¶
マルチスレッディング (pthreads(7) 参照)¶
関数 setbuf(), setbuffer(), setlinebuf(), setvbuf() はスレッドセーフである。準拠¶
setbuf() 関数および setvbuf() 関数は C89 と C99 に準拠している。バグ¶
setbuffer() 関数および setlinebuf() 関数は 4.2BSD より前の BSD とは互換性がない。また Linux でも(古いバージョン では)利用できないかもしれない。4.2BSD および 4.3BSD のシステムでは setbuf() は必ず追加のバッファーのサイズを使用するので、これも使うべきでない。 stream を閉じる時 (プログラムを終了する際にもこれは起きる) には、 buf が指し示す空間とが存在していることを保証しなければならない。 例えば、次のような使い方は許されない:#include <stdio.h> int main(void) { char buf[BUFSIZ]; setbuf(stdin, buf); printf("Hello, world!\n"); return 0; }
関連項目¶
fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2014-02-18 | Linux |