create descriptor pair for interprocess
() function creates a
, which is an object allowing unidirectional
data flow, and allocates a pair of file descriptors. The first descriptor
connects to the read end
of the pipe, and the
second connects to the write end
, so that data
written to fildes
appears on (i.e., can be
read from) fildes
. This allows the output
of one program to be sent to another program: the source's standard output is
set up to be the write end of the pipe, and the sink's standard input is set
up to be the read end of the pipe. The pipe itself persists until all its
associated descriptors are closed.
A pipe whose read or write end has been closed is considered
. Writing on such a pipe causes the
writing process to receive a
signal. Widowing a pipe is the only way to deliver end-of-file to a reader:
after the reader consumes any buffered data, reading a widowed pipe returns a
() function is identical to
() except that the non-blocking I/O mode on
both ends of the pipe is determined by the
flag in the
argument and the close-on-exec flag on
both the new file descriptors is determined by the
flag in the
Upon successful completion, the value 0 is returned; otherwise the
value -1 is returned and the global variable
is set to indicate the error.
() and pipe2
will succeed unless:
- Too many descriptors are active.
- The system file table is full.
- The fildes buffer is in an
invalid area of the process's address space.
In addition, pipe2
() may return the following
- flags is invalid.
() function conforms to
IEEE Std 1003.1-2008
. The pipe2
function is expected to conform to a future revision of that standard.
As an extension, the pipe provided is actually capable of moving data
bidirectionally. This is compatible with SVR4. However, this is non-POSIX
behaviour which should not be relied on, for reasons of portability.
() function call appeared in
Version 3 AT&T UNIX
Version 4 AT&T UNIX
, it allocates two
distinct file descriptors. The pipe2
appeared in OpenBSD 5.7