PIPE(2) System Calls PIPE(2)
NAME
pipe - create an interprocess channel
SYNOPSIS
#include <unistd.h>
int pipe(
int fildes[2]);
int pipe2(
int fildes[2],
int flags);
DESCRIPTION
The
pipe() and pipe2() functions create an I/O mechanism called a pipe
and returns two file descriptors,
fildes[
0] and
fildes[
1]. The files
associated with
fildes[
0] and
fildes[
1] are streams and are both opened
for reading and writing. The
pipe() call will clear the
O_NDELAY,
O_NONBLOCK, and
FD_CLOEXEC flags on both file descriptors. The
fcntl(2) function can be used to set these flags.
The
pipe2() call will clear the
O_NDELAY on both filedescriptors. The
flags argument may be used to specify attributes on both file
descriptors.
pipe2() called with a
flags value of 0 will behave
identically to
pipe(). Values for
flags are constructed by a bitwise-
inclusive-OR of flags from the following list, defined in <
fcntl.h>.
O_NONBLOCK Both file descriptors will be placed in non-blocking mode.
This corresponds to the
O_NONBLOCK flag to
fcntl(2).
O_CLOEXEC Both file descriptors will be opened with the FD_CLOEXEC flag
set. Both file descriptors will be closed prior to any future
exec() calls.
A read from
fildes[
0] accesses the data written to
fildes[
1] on a first-
in-first-out (FIFO) basis and a read from
fildes[
1] accesses the data
written to
fildes[
0] also on a
FIFO basis.
Upon successful completion
pipe() marks for update the
st_atime,
st_ctime, and
st_mtime fields of the pipe.
RETURN VALUES
Upon successful completion,
0 is returned. Otherwise,
-1 is returned and
errno is set to indicate the error.
ERRORS
The
pipe() and
pipe2() functions will fail if:
EMFILE More than {
OPEN_MAX} file descriptors are already in use by
this process.
ENFILE The number of simultaneously open files in the system would
exceed a system-imposed limit.
EFAULT The
fildes[2] argument points to an illegal address.
The
pipe2() function will also fail if:
EINVAL The
flags argument is illegal. Valid
flags are zero or a
bitwise inclusive-OR of
O_CLOEXEC and
O_NONBLOCK.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-------------------+
|Interface Stability | Standard |
+--------------------+-------------------+
|MT-Level | Async-Signal-Safe |
+--------------------+-------------------+
SEE ALSO
sh(1),
fcntl(2),
fstat(2),
getmsg(2),
open(2),
poll(2),
putmsg(2),
read(2),
write(2),
streamio(4I),
attributes(7),
standards(7)NOTES
Since a pipe is bi-directional, there are two separate flows of data.
Therefore, the size (
st_size) returned by a call to
fstat(2) with
argument
fildes[
0] or
fildes[
1] is the number of bytes available for
reading from
fildes[
0] or
fildes[
1] respectively. Previously, the size
(
st_size) returned by a call to
fstat() with argument
fildes[
1] (the
write-end) was the number of bytes available for reading from
fildes[
0]
(the read-end).
April 19, 2013
PIPE(2)