Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       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.65 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。