Man page - setbuf(3)

Packages contains this manual

Available languages:

en fr ja ro zh_TW zh_CN de

Manual

SETBUF

名 前
書 式
説 明
返 り 値
属 性
準 拠
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

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 ():
Since glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 and earlier:
_BSD_SOURCE

説 明

バ ッ フ ァ ー リ ン グ に は unbuffered, block buffered, line buffered の 3つ の タ イ プ が あ る 。 出 力 ス ト リ ー ム の タ イ プ が unbuffered の 場 合 、 デ ー タ を 書 き 込 む と す ぐ に 出 力 先 フ ァ イ ル に 書 き 込 ま れ る か タ ー ミ ナ ル に 表 示 さ れ る 。 block buffered の 場 合 、 文 字 の 読 み 書 き は ブ ロ ッ ク 単 位 で い っ ぺ ん に 行 わ れ る 。 line buffered の 場 合 、 新 し い 行 が 出 力 さ れ る か 、 タ ー ミ ナ ル デ バ イ ス に 接 続 し て い る ス ト リ ー ム (通 常 、 stdin ) か ら 新 し い 行 が 入 力 さ れ る ま で 文 字 が た く わ え ら れ る 。 ブ ロ ッ ク を 強 制 的 に 出 力 す る に は fflush (3) 関 数 を 使 う 。 ( fclose (3) を 参 照 の こ と )

通 常 、 フ ァ イ ル は す べ て block buffered で あ る 。 ス ト リ ー ム が タ ー ミ ナ ル を 参 照 し て い る 場 合 ( stdout は 通 常 タ ー ミ ナ ル を 参 照 し て い る )、 ス ト リ ー ム は line buffered と な る 。 標 準 エ ラ ー 出 力 stderr は デ フ ォ ル ト で は 常 に unbuffered で あ る 。

setvbuf () 関 数 は 、 オ ー プ ン し て い る 任 意 の ス ト リ ー ム に 対 し て バ ッ フ ァ ー を 変 更 で き る 。 引 数 mode は 、 次 の 3 つ の マ ク ロ の う ち い ず れ か で あ る :

_IONBF

unbuffered

_IOLBF

line buffered

_IOFBF

fully buffered

unbuffered の フ ァ イ ル を 除 き 、 buf 引 数 は size バ イ ト 以 上 の 大 き さ の バ ッ フ ァ ー を 指 し て い な け れ ば な ら な い 。 こ の バ ッ フ ァ ー は 現 在 の バ ッ フ ァ ー の 代 わ り に 用 い ら れ る 。 も し 、 引 数 buf が NULL な ら ば 、 モ ー ド だ け が 変 更 さ れ る 。 新 し い バ ッ フ ァ ー は 次 に 読 み 書 き し た 際 に 割 り 当 て ら れ る 。 setvbuf () 関 数 は 、 ス ト リ ー ム を オ ー プ ン し た 後 、 そ の ス ト リ ー ム に 対 し て 何 ら か の 操 作 を す る 前 に の み 使 用 で き る 。

他 の 3 つ の 関 数 は setvbuf () の 呼 び 出 し に 単 純 に 置 き 換 え る こ と が で き る 。 setbuf () 関 数 は 、

setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

と 全 く 同 等 だ し 、 setbuffer () 関 数 は 、 バ ッ フ ァ ー サ イ ズ が デ フ ォ ル ト 値 BUFSIZ で は な く 引 数 で 与 え ら れ る 点 以 外 は 同 じ で あ る 。 setlinebuf () 関 数 は 以 下 と 同 じ で あ る 。

setvbuf(stream, NULL, _IOLBF, 0);

返 り 値

setvbuf () 関 数 は 、 成 功 し た 場 合 0 を 返 す 。 失 敗 し た 場 合 、 0 以 外 の 値 を 返 す (失 敗 と は 、 mode が 不 正 な 場 合 ま た は リ ク エ ス ト が 条 件 を 満 た さ な い 場 合 で あ る )。 setvbuf () 関 数 が 失 敗 し た 場 合 は errno を 設 定 す る こ と も あ る 。

そ の 他 の 関 数 は 値 を 返 さ な い 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-38231-1.png

準 拠

setbuf () 関 数 お よ び setvbuf () 関 数 は C89 と C99 に 準 拠 し て い る 。

バ グ

stream を 閉 じ る 時 (プ ロ グ ラ ム を 終 了 す る 際 に も こ れ は 起 き る ) に は 、 buf が 指 し 示 す 空 間 と が 存 在 し て い る こ と を 保 証 し な け れ ば な ら な い 。 例 え ば 、 次 の よ う な 使 い 方 は 許 さ れ な い :

#include <stdio.h>

int
main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}

関 連 項 目

stdbuf (1), fclose (3), fflush (3), fopen (3), fread (3), malloc (3), printf (3), puts (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。