OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man3 / stdin.3
1 .\" From dholland@burgundy.eecs.harvard.edu Tue Mar 24 18:08:15 1998
2 .\"
3 .\" This man page was written in 1998 by David A. Holland
4 .\" and placed in the Public Domain. Polished a bit by aeb.
5 .\" 2005-06-16 mtk, mentioned freopen()
6 .\"
7 .\" 2007-12-08, mtk, Converted from mdoc to man macros
8 .\"
9 .\" Japanese Version Copyright (c) 1998 NAKANO Takeo all rights reserved.
10 .\" Translated 1998-03-22, NAKANO Takeo <nakano@apm.seikei.ac.jp>
11 .\" Updated 2005-09-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
12 .\"
13 .TH STDIN 3 2008-07-14 "Linux" "Linux Programmer's Manual"
14 .SH 名前
15 stdin, stdout, stderr \- 標準入出力ストリーム
16 .SH 書式
17 .nf
18 .B #include <stdio.h>
19
20 .BI "extern FILE *" stdin ;
21 .BI "extern FILE *" stdout ;
22 .BI "extern FILE *" stderr ;
23 .fi
24 .SH 説明
25 標準の環境では、 UNIX プログラムは起動時に、オープンされているストリー
26 ムを 3 つ与えられる。それぞれ入力用、出力用、診断メッセージやエラーメッ
27 セージの表示用のものである。これらは通常ユーザの端末
28 .RB ( tty (4)
29 を見よ) に接続されているが、親プロセスでの選択・設定によってファイル
30 や他のデバイスに関連づけられていることもある
31 .RB ( sh (1)
32 の「リダイレクション」セクションも参照のこと)。
33 .PP
34 入力ストリームは "standard input" と呼ばれる。出力ストリームは
35 "standard output"、エラーストリームは "standard error" と呼ばれる。
36 これらの用語を短縮したものがそれぞれのファイルを示すシンボルとなる。つ
37 まり
38 .IR stdin ,
39 .IR stdout ,
40 .I stderr
41 である。
42 .PP
43 これらのシンボルは
44 .BR stdio (3)
45 のマクロで、 FILE へのポインタ型である。したがって
46 .BR fprintf (3)
47
48 .BR fread (3)
49 などの関数とともに用いることができる。
50 .PP
51 .I FILE
52 は UNIX のファイルディスクリプタにバッファ機能を追加したラッパー
53 であるから、これらのマクロにも対応するファイルがあり、 UNIX の raw ファ
54 イルインタフェース
55 .RB ( read (2)
56
57 .BR lseek (2)
58 など) によってアクセスすることもできる。
59 .PP
60 プログラムの起動時には、
61 ストリーム
62 .IR stdin ,
63 .IR stdout ,
64 .I stderr
65 に結びつけられているファイルディスクリプタの番号は、
66 それぞれ 0, 1, 2 である。
67 プリプロセッサシンボル
68 .BR STDIN_FILENO ,
69 .BR STDOUT_FILENO ,
70 .B STDERR_FILENO
71
72 .I <unistd.h>
73 中でそれぞれこれらの値に定義されている。
74 (これらのストリームに対して
75 .BR freopen (3)
76 を適用することで、そのストリームに関連付けられたファイルディスクリプタ
77 の番号を変更することができる。)
78 .PP
79 .I FILE
80 と raw なファイルディスクリプタの併用は、予期できない結果を生じ
81 ることがあるので、通常は避けるべきである。 (マゾヒスティックな人に:
82 POSIX.1 のセクション 8.2.3 には、この混用で動作がどのようになりそう
83 かが詳しく記述されている。)
84 一般的なルールは以下の通り: ファイルディスクリプタはカーネルによって
85 扱われ、 stdio は単にライブラリによって扱われるのである。すなわち例えば
86 .BR exec (3)
87 の後には、子プロセスはオープンされているファイルディスクリプタ
88 をすべて継承するが、親からのストリームはすべてアクセス不可となる。
89 .PP
90 シンボル
91 .IR stdin ,
92 .IR stdout ,
93 .I stderr
94 はすべてマクロとして定義されているので、これらへの代入
95 は移植性を保証されない。標準ストリームはライブラリ関数
96 .BR freopen (3)
97 を用いれば、別のファイルを示すように変更することもできる。
98 このライブラリ関数は
99 .IR stdin ,
100 .IR stdout ,
101 .I stderr
102 の再割り当てが可能なように特別に導入されたものである。
103 標準ストリームは
104 .BR exit (3)
105 の呼び出しと、プログラムの正常終了によってクローズされる。
106 .SH 準拠
107 .IR stdin ,
108 .IR stdout ,
109 .I stderr
110 マクロは C89 に準拠している。
111 また C89 では、これら 3 つのストリームがプログラム
112 の起動時にオープンされているべきであることが規定されている。
113 .SH 注意
114 .I stderr
115 ストリームはバッファリングされていない。
116 .I stdout
117 ストリームは、端末に接続されているときには行単位でバッファリング
118 されている。一行に満たない内容は、
119 .BR fflush (3)
120
121 .BR exit (3)
122 が呼び出されるか、改行文字が印字されるまで表示されない。これは、
123 特にデバッグ時において、予期しない結果を生じる原因となるかもしれない。
124 標準ストリームの (あるいは他のすべてのストリームの)
125 バッファリングモードは、
126 .BR setbuf (3)
127 または
128 .BR setvbuf (3)
129 を呼び出すことによって変更できる。
130 ただし、
131 .I stdin
132 が端末に接続されているときは、端末のドライバでバッファリングされている
133 可能性がある点にも注意すること。これは stdio のバッファリングとは全く
134 関係なく存在しうる。 (実際、通常だと端末入力はカーネルによって行単位
135 でバッファリングされている。) このカーネルによる入力の扱いは
136 .BR tcsetattr (3)
137 などの呼び出しによって変更することができる。
138 .BR stty (1)
139
140 .BR termios (3)
141 も参照すること。
142 .SH 関連項目
143 .BR csh (1),
144 .BR sh (1),
145 .BR open (2),
146 .BR fopen (3),
147 .BR stdio (3)