#include <stdio.h> extern FILE *stdin; extern FILE *stdout; extern FILE *stderr;
入力ストリームは "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) の呼び出しと、プログラムの正常終了によってクローズされる。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]