]> git.ipfire.org Git - thirdparty/man-pages.git/blob - man7/pipe.7
Changes, ldd.1, chown.2, epoll_wait.2, get_mempolicy.2, ioctl_getfsmap.2, madvise...
[thirdparty/man-pages.git] / man7 / pipe.7
1 .\" Copyright (C) 2005 Michael Kerrisk <mtk.manpages@gmail.com>
2 .\"
3 .\" %%%LICENSE_START(VERBATIM)
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date. The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein. The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" %%%LICENSE_END
24 .\"
25 .TH PIPE 7 2017-07-13 "Linux" "Linux Programmer's Manual"
26 .SH NAME
27 pipe \- overview of pipes and FIFOs
28 .SH DESCRIPTION
29 Pipes and FIFOs (also known as named pipes)
30 provide a unidirectional interprocess communication channel.
31 A pipe has a
32 .I read end
33 and a
34 .IR "write end" .
35 Data written to the write end of a pipe can be read
36 from the read end of the pipe.
37
38 A pipe is created using
39 .BR pipe (2),
40 which creates a new pipe and returns two file descriptors,
41 one referring to the read end of the pipe,
42 the other referring to the write end.
43 Pipes can be used to create a communication channel between related
44 processes; see
45 .BR pipe (2)
46 for an example.
47
48 A FIFO (short for First In First Out) has a name within the filesystem
49 (created using
50 .BR mkfifo (3)),
51 and is opened using
52 .BR open (2).
53 Any process may open a FIFO, assuming the file permissions allow it.
54 The read end is opened using the
55 .B O_RDONLY
56 flag; the write end is opened using the
57 .B O_WRONLY
58 flag.
59 See
60 .BR fifo (7)
61 for further details.
62 .IR Note :
63 although FIFOs have a pathname in the filesystem,
64 I/O on FIFOs does not involve operations on the underlying device
65 (if there is one).
66 .SS I/O on pipes and FIFOs
67 The only difference between pipes and FIFOs is the manner in which
68 they are created and opened.
69 Once these tasks have been accomplished,
70 I/O on pipes and FIFOs has exactly the same semantics.
71
72 If a process attempts to read from an empty pipe, then
73 .BR read (2)
74 will block until data is available.
75 If a process attempts to write to a full pipe (see below), then
76 .BR write (2)
77 blocks until sufficient data has been read from the pipe
78 to allow the write to complete.
79 Nonblocking I/O is possible by using the
80 .BR fcntl (2)
81 .B F_SETFL
82 operation to enable the
83 .B O_NONBLOCK
84 open file status flag.
85
86 The communication channel provided by a pipe is a
87 .IR "byte stream" :
88 there is no concept of message boundaries.
89
90 If all file descriptors referring to the write end of a pipe
91 have been closed, then an attempt to
92 .BR read (2)
93 from the pipe will see end-of-file
94 .RB ( read (2)
95 will return 0).
96 If all file descriptors referring to the read end of a pipe
97 have been closed, then a
98 .BR write (2)
99 will cause a
100 .B SIGPIPE
101 signal to be generated for the calling process.
102 If the calling process is ignoring this signal, then
103 .BR write (2)
104 fails with the error
105 .BR EPIPE .
106 An application that uses
107 .BR pipe (2)
108 and
109 .BR fork (2)
110 should use suitable
111 .BR close (2)
112 calls to close unnecessary duplicate file descriptors;
113 this ensures that end-of-file and
114 .BR SIGPIPE / EPIPE
115 are delivered when appropriate.
116
117 It is not possible to apply
118 .BR lseek (2)
119 to a pipe.
120 .SS Pipe capacity
121 A pipe has a limited capacity.
122 If the pipe is full, then a
123 .BR write (2)
124 will block or fail, depending on whether the
125 .B O_NONBLOCK
126 flag is set (see below).
127 Different implementations have different limits for the pipe capacity.
128 Applications should not rely on a particular capacity:
129 an application should be designed so that a reading process consumes data
130 as soon as it is available,
131 so that a writing process does not remain blocked.
132
133 In Linux versions before 2.6.11, the capacity of a pipe was the same as
134 the system page size (e.g., 4096 bytes on i386).
135 Since Linux 2.6.11, the pipe capacity is 16 pages
136 (i.e., 65,536 bytes in a system with a page size of 4096 bytes).
137 Since Linux 2.6.35, the default pipe capacity is 16 pages,
138 but the capacity can be queried and set using the
139 .BR fcntl (2)
140 .BR F_GETPIPE_SZ
141 and
142 .BR F_SETPIPE_SZ
143 operations.
144 See
145 .BR fcntl (2)
146 for more information.
147
148 The following
149 .BR ioctl (2)
150 operation, which can be applied to a file descriptor
151 that refers to either end of a pipe,
152 places a count of the number of unread bytes in the pipe in the
153 .I int
154 buffer pointed to by the final argument of the call:
155
156 ioctl(fd, FIONREAD, &nbytes);
157
158 The
159 .B FIONREAD
160 operation is not specified in any standard,
161 but is provided on many implementations.
162 .\"
163 .SS /proc files
164 On Linux, the following files control how much memory can be used for pipes:
165 .TP
166 .IR /proc/sys/fs/pipe-max-pages " (only in Linux 2.6.34)"
167 .\" commit b492e95be0ae672922f4734acf3f5d35c30be948
168 An upper limit, in pages, on the capacity that an unprivileged user
169 (one without the
170 .BR CAP_SYS_RESOURCE
171 capability)
172 can set for a pipe.
173
174 The default value for this limit is 16 times the default pipe capacity
175 (see above); the lower limit is two pages.
176
177 This interface was removed in Linux 2.6.35, in favor of
178 .IR /proc/sys/fs/pipe-max-size .
179 .TP
180 .IR /proc/sys/fs/pipe-max-size " (since Linux 2.6.35)"
181 .\" commit ff9da691c0498ff81fdd014e7a0731dab2337dac
182 The maximum size (in bytes) of individual pipes that can be set
183 .\" This limit is not checked on pipe creation, where the capacity is
184 .\" always PIPE_DEF_BUFS, regardless of pipe-max-size
185 by users without the
186 .B CAP_SYS_RESOURCE
187 capability.
188 The value assigned to this file may be rounded upward,
189 to reflect the value actually employed for a convenient implementation.
190 To determine the rounded-up value,
191 display the contents of this file after assigning a value to it.
192
193 The default value for this file is 1048576 (1 MiB).
194 The minimum value that can be assigned to this file is the system page size.
195 Attempts to set a limit less than the page size cause
196 .BR write (2)
197 to fail with the error
198 .BR EINVAL .
199
200 Since Linux 4.9,
201 .\" commit 086e774a57fba4695f14383c0818994c0b31da7c
202 the value on this file also acts as a ceiling on the default capacity
203 of a new pipe or newly opened FIFO.
204 .TP
205 .IR /proc/sys/fs/pipe-user-pages-hard " (since Linux 4.5)"
206 .\" commit 759c01142a5d0f364a462346168a56de28a80f52
207 The hard limit on the total size (in pages) of all pipes created or set by
208 a single unprivileged user (i.e., one with neither the
209 .B CAP_SYS_RESOURCE
210 nor the
211 .B CAP_SYS_ADMIN
212 capability).
213 So long as the total number of pages allocated to pipe buffers
214 for this user is at this limit,
215 attempts to create new pipes will be denied,
216 and attempts to increase a pipe's capacity will be denied.
217
218 When the value of this limit is zero (which is the default),
219 no hard limit is applied.
220 .\" The default was chosen to avoid breaking existing applications that
221 .\" make intensive use of pipes (e.g., for splicing).
222 .TP
223 .IR /proc/sys/fs/pipe-user-pages-soft " (since Linux 4.5)"
224 .\" commit 759c01142a5d0f364a462346168a56de28a80f52
225 The soft limit on the total size (in pages) of all pipes created or set by
226 a single unprivileged user (i.e., one with neither the
227 .B CAP_SYS_RESOURCE
228 nor the
229 .B CAP_SYS_ADMIN
230 capability).
231 So long as the total number of pages allocated to pipe buffers
232 for this user is at this limit,
233 individual pipes created by a user will be limited to one page,
234 and attempts to increase a pipe's capacity will be denied.
235
236 When the value of this limit is zero, no soft limit is applied.
237 The default value for this file is 16384,
238 which permits creating up to 1024 pipes with the default capacity.
239 .PP
240 Before Linux 4.9, some bugs affected the handling of the
241 .IR pipe-user-pages-soft
242 and
243 .IR pipe-user-pages-hard
244 limits; see BUGS.
245 .\"
246 .SS PIPE_BUF
247 POSIX.1 says that
248 .BR write (2)s
249 of less than
250 .B PIPE_BUF
251 bytes must be atomic: the output data is written to the pipe as a
252 contiguous sequence.
253 Writes of more than
254 .B PIPE_BUF
255 bytes may be nonatomic: the kernel may interleave the data
256 with data written by other processes.
257 POSIX.1 requires
258 .B PIPE_BUF
259 to be at least 512 bytes.
260 (On Linux,
261 .B PIPE_BUF
262 is 4096 bytes.)
263 The precise semantics depend on whether the file descriptor is nonblocking
264 .RB ( O_NONBLOCK ),
265 whether there are multiple writers to the pipe, and on
266 .IR n ,
267 the number of bytes to be written:
268 .TP
269 \fBO_NONBLOCK\fP disabled, \fIn\fP <= \fBPIPE_BUF\fP
270 All
271 .I n
272 bytes are written atomically;
273 .BR write (2)
274 may block if there is not room for
275 .I n
276 bytes to be written immediately
277 .TP
278 \fBO_NONBLOCK\fP enabled, \fIn\fP <= \fBPIPE_BUF\fP
279 If there is room to write
280 .I n
281 bytes to the pipe, then
282 .BR write (2)
283 succeeds immediately, writing all
284 .I n
285 bytes; otherwise
286 .BR write (2)
287 fails, with
288 .I errno
289 set to
290 .BR EAGAIN .
291 .TP
292 \fBO_NONBLOCK\fP disabled, \fIn\fP > \fBPIPE_BUF\fP
293 The write is nonatomic: the data given to
294 .BR write (2)
295 may be interleaved with
296 .BR write (2)s
297 by other process;
298 the
299 .BR write (2)
300 blocks until
301 .I n
302 bytes have been written.
303 .TP
304 \fBO_NONBLOCK\fP enabled, \fIn\fP > \fBPIPE_BUF\fP
305 If the pipe is full, then
306 .BR write (2)
307 fails, with
308 .I errno
309 set to
310 .BR EAGAIN .
311 Otherwise, from 1 to
312 .I n
313 bytes may be written (i.e., a "partial write" may occur;
314 the caller should check the return value from
315 .BR write (2)
316 to see how many bytes were actually written),
317 and these bytes may be interleaved with writes by other processes.
318 .SS Open file status flags
319 The only open file status flags that can be meaningfully applied to
320 a pipe or FIFO are
321 .B O_NONBLOCK
322 and
323 .BR O_ASYNC .
324
325 Setting the
326 .B O_ASYNC
327 flag for the read end of a pipe causes a signal
328 .RB ( SIGIO
329 by default) to be generated when new input becomes available on the pipe.
330 The target for delivery of signals must be set using the
331 .BR fcntl (2)
332 .B F_SETOWN
333 command.
334 On Linux,
335 .B O_ASYNC
336 is supported for pipes and FIFOs only since kernel 2.6.
337 .SS Portability notes
338 On some systems (but not Linux), pipes are bidirectional:
339 data can be transmitted in both directions between the pipe ends.
340 POSIX.1 requires only unidirectional pipes.
341 Portable applications should avoid reliance on
342 bidirectional pipe semantics.
343 .SS BUGS
344 Before Linux 4.9, some bugs affected the handling of the
345 .IR pipe-user-pages-soft
346 and
347 .IR pipe-user-pages-hard
348 limits when using the
349 .BR fcntl (2)
350 .BR F_SETPIPE_SZ
351 operation to change a pipe's capacity:
352 .\" These bugs where remedied by a series of patches, in particular,
353 .\" commit b0b91d18e2e97b741b294af9333824ecc3fadfd8 and
354 .\" commit a005ca0e6813e1d796a7422a7e31d8b8d6555df1
355 .IP (1) 5
356 When increasing the pipe capacity, the checks against the soft and
357 hard limits were made against existing consumption,
358 and excluded the memory required for the increased pipe capacity.
359 The new increase in pipe capacity could then push the total
360 memory used by the user for pipes (possibly far) over a limit.
361 (This could also trigger the problem described next.)
362
363 Starting with Linux 4.9,
364 the limit checking includes the memory required for the new pipe capacity.
365 .IP (2)
366 The limit checks were performed even when the new pipe capacity was
367 less than the existing pipe capacity.
368 This could lead to problems if a user set a large pipe capacity,
369 and then the limits were lowered, with the result that the user could
370 no longer decrease the pipe capacity.
371
372 Starting with Linux 4.9, checks against the limits
373 are performed only when increasing a pipe's capacity;
374 an unprivileged user can always decrease a pipe's capacity.
375 .IP (3)
376 The accounting and checking against the limits were done as follows:
377
378 .RS
379 .PD 0
380 .IP (a) 4
381 Test whether the user has exceeded the limit.
382 .IP (b)
383 Make the new pipe buffer allocation.
384 .IP (c)
385 Account new allocation against the limits.
386 .PD
387 .RE
388 .IP
389 This was racey.
390 Multiple processes could pass point (a) simultaneously,
391 and then allocate pipe buffers that were accounted for only in step (c),
392 with the result that the user's pipe buffer
393 allocation could be pushed over the limit.
394
395 Starting with Linux 4.9,
396 the accounting step is performed before doing the allocation,
397 and the operation fails if the limit would be exceeded.
398 .PP
399 Before Linux 4.9, bugs similar to points (1) and (3) could also occur
400 when the kernel allocated memory for a new pipe buffer;
401 that is, when calling
402 .BR pipe (2)
403 and when opening a previously unopened FIFO.
404 .SH SEE ALSO
405 .BR mkfifo (1),
406 .BR dup (2),
407 .BR fcntl (2),
408 .BR open (2),
409 .BR pipe (2),
410 .BR poll (2),
411 .BR select (2),
412 .BR socketpair (2),
413 .BR splice (2),
414 .BR stat (2),
415 .BR tee (2),
416 .BR vmsplice (2),
417 .BR mkfifo (3),
418 .BR epoll (7),
419 .BR fifo (7)