OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man7 / pipe.7
1 .\" Hey Emacs! This file is -*- nroff -*- source.
2 .\"
3 .\" Copyright (C) 2005 Michael Kerrisk <mtk.manpages@gmail.com>
4 .\"
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\"
25 .\" Japanese Version Copyright (c) 2005 Akihiro MOTOKI all rights reserved.
26 .\" Translated 2005-12-26, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
27 .\"
28 .TH PIPE 7 2005-12-08 "Linux" "Linux Programmer's Manual"
29 .SH 名前
30 pipe \- パイプと FIFO の概要
31 .SH 説明
32 パイプと FIFO (名前付きパイプともいう) は、
33 単方向のプロセス間通信チャネルを提供する。
34 パイプには「読み出し側」と「書き込み側」がある。
35 パイプの書き込み側で書き込まれたデータは、
36 パイプの読み出し側から読み出すことができる。
37
38 パイプを作成するには
39 .BR pipe (2)
40 を使用する。
41 .BR pipe (2)
42 は新しいパイプを作成し、ファイル・ディスクリプタを二つ返す。
43 ディスクリプタのうち、一方はパイプの読み出し側を、もう一方は
44 書き込み側を参照している。
45 パイプは関連するプロセス間の通信を作成するのに使用できる。
46 例は
47 .BR pipe (2)
48 を参照。
49
50 FIFO (First In First Out の省略) はファイルシステムでの名前を持ち、
51 .BR open (2)
52 を使ってオープンできる
53 .RB ( mkfifo (3)
54 を使って作成される)。
55 どんなプロセスでも、ファイルのアクセス許可があれば FIFO をオープンする
56 ことができる。
57 読み出し側をオープンするには
58 .B O_RDONLY
59 フラグを使用し、書き込み側をオープンするには
60 .B O_WRONLY
61 フラグを使用する。詳細は
62 .BR fifo (7)
63 を参照。
64 【注意】
65 FIFO はファイルシステム内のパス名を持つが、
66 FIFO に対して入出力を行っても、(ファイルシステムが存在するデバイスが
67 あったとしても) そのデバイスに対する操作は発生しない。
68 .SS "パイプや FIFO に対する入出力"
69 パイプと FIFO の違いは作成やオープンの方法だけである。
70 これらの操作が完了した後は、パイプと FIFO に対する入出力は
71 全く同じ仕組みで行われる。
72
73 プロセスが空のパイプから読み出しを行おうとした場合、
74 .BR read (2)
75 はデータが読み出し可能になるまで停止する。
76 プロセスがフル状態のパイプに書き込みを行おうとした場合、
77 .BR write (2)
78 は書き込みを完了するのに十分な量のパイプからの読み出しが
79 行われるまで停止する。
80 非停止 (nonblocking) I/O を使うこともできる。
81 非停止 I/O を使うには、
82 .BR fcntl (2)
83 .B F_SETFL
84 操作を使って、
85 .B O_NONBLOCK
86 オープンファイル状態フラグを有効にする。
87
88 パイプにより提供される通信チャネルは「バイトストリーム」であり、
89 メッセージ境界の概念はない。
90
91 パイプの書き込み側を参照しているファイル・ディスクリプタが
92 すべてクローズされた後で、そのパイプから
93 .BR read (2)
94 を行おうとした場合、
95 end-of-file (ファイル末尾) が見える
96 .RB ( read (2)
97 は 0 を返す)。
98 パイプの読み出し側を参照しているファイル・ディスクリプタが
99 すべてクローズされた後で、
100 .BR write (2)
101 を行うと、呼び出し元プロセスに
102 .B SIGPIPE
103 シグナルが送られる。
104 呼び出し元プロセスがこのシグナルを無視しているときには、
105 .BR write (2)
106 はエラー
107 .B EPIPE
108 で失敗する。
109 .BR pipe (2)
110
111 .BR fork (2)
112 を使用するアプリケーションでは、
113 .BR close (2)
114 を適切に使って不必要なファイル・ディスクリプタの複製を
115 クローズすべきである。こうすることで、必要な時に確実に
116 end-of-file や
117 .BR SIGPIPE / EPIPE
118 が配送されるようになる。
119
120 パイプには
121 .BR lseek (2)
122 を行うことはできない。
123 .SS パイプの容量
124 パイプの容量には上限がある。
125 パイプがフルの場合、
126 .BR write (2)
127 は停止したり失敗したりする。どちらになるかは
128 .B O_NONBLOCK
129 フラグがセットされているかどうかに依存する (下記参照)。
130 実装により、パイプの容量の上限は異なる。
131 アプリケーションは特定の容量を前提にすべきではない。
132 書き込み側のプロセスが停止したままにならないよう、
133 読み出し側のプロセスはデータが利用可能になったらできるだけすぐに
134 読み出しを行うように、アプリケーションを設計すべきである。
135
136 バージョン 2.6.11 より前の Linux ではパイプの容量はシステムのページサイズ
137 と同じであった (例えば i386 では 4096 バイト)。
138 Linux 2.6.11 以降では、パイプの容量は 65536 バイトである。
139 .SS PIPE_BUF
140 POSIX.1-2001 では、
141 .B PIPE_BUF
142 バイト以下の
143 .BR write (2)
144 は atomic に行われること、つまりパイプへの出力データの書き込みは
145 連続したシーケンスとして行われることを必須としている (MUST)。
146 .B PIPE_BUF
147 バイトより多くのデータを書き込み場合は atomic とはならない、
148 つまりパイプへの他のプロセスによるデータの書き込みが間に入る
149 可能性がある。
150 POSIX.1-2001 の仕様では、
151 .B PIPE_BUF
152 は最小でも 512 バイトであることが要求されている
153 (Linux では
154 .B PIPE_BUF
155 は 4096 バイトである)。
156 正確な動作は、ファイル・ディスクリプタが nonblocking
157 .RB ( O_NONBLOCK )
158 かどうか、パイプへの書き込みが複数から行われるかどうか、および
159 書き込みを行うバイト数
160 .I n
161 により決定される。
162 .TP
163 \fBO_NONBLOCK\fP 無効, \fIn\fP <= \fBPIPE_BUF\fP
164 .I n
165 バイト全部の書き込みが atomic に行われる。
166 .I n
167 バイト分をすぐに書き込む余地がない場合は
168 .BR write (2)
169 は停止 (block) することがある。
170 .TP
171 \fBO_NONBLOCK\fP 有効, \fIn\fP <= \fBPIPE_BUF\fP
172 パイプに
173 .I n
174 バイトを書き込む余地がある場合は、
175 .I n
176 バイト全部がすぐに書き込まれる。
177 余地がない場合は、
178 .BR write (2)
179 は失敗し、
180 .I errno
181
182 .B EAGAIN
183 がセットされる。
184 .TP
185 \fBO_NONBLOCK\fP 無効, \fIn\fP > \fBPIPE_BUF\fP
186 書き込みは atomic とはならない。
187 .BR write (2)
188 に渡されたデータの間に、他のプロセスにより
189 .BR write (2)
190 されたデータが入ることがある。
191 .BR write (2)
192
193 .I n
194 バイトの書き込みが完了するまで停止する。
195 .TP
196 \fBO_NONBLOCK\fP 有効, \fIn\fP > \fBPIPE_BUF\fP
197 パイプがフルの場合、
198 .BR write (2)
199 は失敗し、
200 .I errno
201
202 .B EAGAIN
203 がセットされる。
204 それ以外の場合、1 バイト以上
205 .I n
206 バイト以下のデータが書き込まれる
207 (つまり「一部分だけ書き込まれる」場合もあり得る)。
208 呼び出し元は
209 .BR write (2)
210 の返り値を参照し、実際に何バイト書き込まれたのかを確認すべきである。
211 また、書き込みに成功したデータも、他のプロセスが書き込んだデータが
212 間に入ることがある。
213 .SS オープンファイル状態フラグ
214 オープンファイル状態フラグのうち、パイプや FIFO に対して意味を持つのは
215 .B O_NONBLOCK
216
217 .B O_ASYNC
218 だけである。
219
220 パイプの読み出し側に
221 .B O_ASYNC
222 フラグをセットすると、パイプに新たな入力があるとシグナル (デフォルトでは
223 .BR SIGIO )
224 が生成される (詳細は
225 .BR fcntl (2)
226 を参照)。
227 Linux では、
228 パイプと FIFO に対する
229 .B O_ASYNC
230 はカーネル 2.6 以降でのみサポートされている。
231 .SS 移植に関する注意
232 いくつかのシステム (Linux ではない) では、パイプは双方向である、
233 つまりパイプの両端間でデータを両方向に送信することができる。
234 POSIX.1-2001 では、パイプは一方向の通信だけに対応していればよい。
235 移植を考慮したアプリケーションでは、双方向パイプの仕組みを
236 前提にすべきではない。
237 .SH 関連項目
238 .BR dup (2),
239 .BR fcntl (2),
240 .BR open (2),
241 .BR pipe (2),
242 .BR poll (2),
243 .BR select (2),
244 .BR socketpair (2),
245 .BR stat (2),
246 .BR mkfifo (3),
247 .BR epoll (7),
248 .BR fifo (7)