Manpages

名 前

stdin, stdout, stderr − 標 準 入 出 力 ス ト リ ー ム

書 式

#include <stdio.h>

extern FILE *stdin;
extern FILE *
stdout;
extern FILE *
stderr;

説 明

標 準 の 環 境 で は 、 UNIX プ ロ グ ラ ム は 起 動 時 に 、 オ ー プ ン さ れ て い る ス ト リ ー ム を 3 つ 与 え ら れ る 。 そ れ ぞ れ 入 力 用 、 出 力 用 、 診 断 メ ッ セ ー ジ や エ ラ ー メ ッ セ ー ジ の 表 示 用 の も の で あ る 。 こ れ ら は 通 常 ユ ー ザ ー の 端 末 (tty(4) を 見 よ ) に 接 続 さ れ て い る が 、 親 プ ロ セ ス で の 選 択 ・ 設 定 に よ っ て フ ァ イ ル や 他 の デ バ イ ス に 関 連 づ け ら れ て い る こ と も あ る (sh(1) の 「 リ ダ イ レ ク シ ョ ン 」 セ ク シ ョ ン も 参 照 の こ と )。 入 力 ス ト リ ー ム は "standard input" と 呼 ば れ る 。 出 力 ス ト リ ー ム は "standard output"、 エ ラ ー ス ト リ ー ム は "standard error" と 呼 ば れ る 。 こ れ ら の 用 語 を 短 縮 し た も の が そ れ ぞ れ の フ ァ イ ル を 示 す シ ン ボ ル と な る 。 つ ま り stdin, stdout, stderr で あ る 。 こ れ ら の シ ン ボ ル は stdio(3) の マ ク ロ で 、 FILE へ の ポ イ ン タ ー 型 で あ る 。 し た が っ て fprintf(3)fread(3) な ど の 関 数 と と も に 用 い る こ と が で き る 。

FILE は UNIX の フ ァ イ ル デ ィ ス ク リ プ タ ー に バ ッ フ ァ ー 機 能 を 追 加 し た ラ ッ パ ー で あ る か ら 、 こ れ ら の マ ク ロ に も 対 応 す る フ ァ イ ル が あ り 、 UNIX の raw フ ァ イ ル イ ン タ ー フ ェ ー ス (read(2) や lseek(2) な ど ) に よ っ て ア ク セ ス す る こ と も で き る 。 プ ロ グ ラ ム の 起 動 時 に は 、 ス ト リ ー ム stdin, stdout, stderr に 結 び つ け ら れ て い る フ ァ イ ル デ ィ ス ク リ プ タ ー の 番 号 は 、 そ れ ぞ れ 0, 1, 2 で あ る 。 プ リ プ ロ セ ッ サ シ ン ボ ル STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO<unistd.h> 中 で そ れ ぞ れ こ れ ら の 値 に 定 義 さ れ て い る 。 (こ れ ら の ス ト リ ー ム に 対 し て freopen(3) を 適 用 す る こ と で 、 そ の ス ト リ ー ム に 関 連 付 け ら れ た フ ァ イ ル デ ィ ス ク リ プ タ ー の 番 号 を 変 更 す る こ と が で き る 。 )

FILE と raw な フ ァ イ ル デ ィ ス ク リ プ タ ー の 併 用 は 、 予 期 で き な い 結 果 を 生 じ る こ と が あ る の で 、 通 常 は 避 け る べ き で あ る 。 (マ ゾ ヒ ス テ ィ ッ ク な 人 に : POSIX.1 の セ ク シ ョ ン 8.2.3 に は 、 こ の 混 用 で 動 作 が ど の よ う に な り そ う か が 詳 し く 記 述 さ れ て い る 。 ) 一 般 的 な ル ー ル は 以 下 の 通 り : フ ァ イ ル デ ィ ス ク リ プ タ ー は カ ー ネ ル に よ っ て 扱 わ れ 、 stdio は 単 に ラ イ ブ ラ リ に よ っ て 扱 わ れ る の で あ る 。 す な わ ち 例 え ば exec(3) の 後 に は 、 子 プ ロ セ ス は オ ー プ ン さ れ て い る フ ァ イ ル デ ィ ス ク リ プ タ ー を す べ て 継 承 す る が 、 親 か ら の ス ト リ ー ム は す べ て ア ク セ ス 不 可 と な る 。 シ ン ボ ル stdin, stdout, stderr は す べ て マ ク ロ と し て 定 義 さ れ て い る の で 、 こ れ ら へ の 代 入 は 移 植 性 を 保 証 さ れ な い 。 標 準 ス ト リ ー ム は ラ イ ブ ラ リ 関 数 freopen(3) を 用 い れ ば 、 別 の フ ァ イ ル を 示 す よ う に 変 更 す る こ と も で き る 。 こ の ラ イ ブ ラ リ 関 数 は stdin, stdout, stderr の 再 割 り 当 て が 可 能 な よ う に 特 別 に 導 入 さ れ た も の で あ る 。 標 準 ス ト リ ー ム は exit(3) の 呼 び 出 し と 、 プ ロ グ ラ ム の 正 常 終 了 に よ っ て ク ロ ー ズ さ れ る 。

準 拠

stdin, stdout, stderr マ ク ロ は C89 に 準 拠 し て い る 。 ま た C89 で は 、 こ れ ら 3 つ の ス ト リ ー ム が プ ロ グ ラ ム の 起 動 時 に オ ー プ ン さ れ て い る べ き で あ る こ と が 規 定 さ れ て い る 。

注 意

stderr ス ト リ ー ム は バ ッ フ ァ ー リ ン グ さ れ て い な い 。 stdout ス ト リ ー ム は 、 端 末 に 接 続 さ れ て い る と き に は 行 単 位 で バ ッ フ ァ ー リ ン グ さ れ て い る 。 一 行 に 満 た な い 内 容 は 、 fflush(3)exit(3) が 呼 び 出 さ れ る か 、 改 行 文 字 が 印 字 さ れ る ま で 表 示 さ れ な い 。 こ れ は 、 特 に デ バ ッ グ 時 に お い て 、 予 期 し な い 結 果 を 生 じ る 原 因 と な る か も し れ な い 。 標 準 ス ト リ ー ム の (あ る い は 他 の す べ て の ス ト リ ー ム の ) バ ッ フ ァ ー リ ン グ モ ー ド は 、 setbuf(3) ま た は setvbuf(3) を 呼 び 出 す こ と に よ っ て 変 更 で き る 。 た だ し 、 stdin が 端 末 に 接 続 さ れ て い る と き は 、 端 末 の ド ラ イ バ で バ ッ フ ァ ー リ ン グ さ れ て い る 可 能 性 が あ る 点 に も 注 意 す る こ と 。 こ れ は stdio の バ ッ フ ァ ー リ ン グ と は 全 く 関 係 な く 存 在 し う る 。 (実 際 、 通 常 だ と 端 末 入 力 は カ ー ネ ル に よ っ て 行 単 位 で バ ッ フ ァ ー リ ン グ さ れ て い る 。 ) こ の カ ー ネ ル に よ る 入 力 の 扱 い は tcsetattr(3) な ど の 呼 び 出 し に よ っ て 変 更 す る こ と が で き る 。 stty(1)termios(3) も 参 照 す る こ と 。

関 連 項 目

csh(1), sh(1), open(2), fopen(3), stdio(3)

こ の 文 書 に つ い て

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