| PIPE(2) | System Calls Manual | PIPE(2) |
pipe, pipe2
— create descriptor pair for interprocess
communication
#include
<unistd.h>
int
pipe(int fildes[2]);
int
pipe2(int fildes[2],
int flags);
The
pipe()
function creates a pipe (an object that allows
unidirectional data flow) and allocates a pair of file descriptors.
The first descriptor connects to the read end of the pipe; the second connects to the write end.
Data written to fildes[1] appears on (i.e., can be read from) fildes[0]. 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; the sink's standard input is set up to be the read end of the pipe. The pipe itself persists until all of its associated descriptors are closed.
A pipe whose read or write end has been closed is
considered
widowed. Writing
on such a pipe causes the writing process to receive a
SIGPIPE 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 zero count.
The generation of the SIGPIPE signal can
be suppressed using the F_SETNOSIGPIPE fcntl
command.
The
pipe2()
function allows control over the initial attributes of the file descriptors
via the flags argument. Value for
flags are constructed by a bitwise-inclusive OR of
flags from the following list, defined in
<fcntl.h>:
O_CLOEXECO_CLOFORKO_NONBLOCKIf the flags argument is 0, the
behavior is identical to a call to
pipe().
On successful creation of the pipe, zero is returned. Otherwise, a value of -1 is returned and the variable errno set to indicate the error.
The pipe() and
pipe2() calls will fail if:
EFAULT]EMFILE]ENFILE]ENOMEM]The pipe2() call will fail if:
EINVAL]A pipe() function call appeared in
Version 6 AT&T UNIX.
| February 17, 2011 | BSD 4 |