The pipe() function shall create a pipe and place two file descriptors,
one each into the arguments fildes[0] and
fildes[1], that refer to the open file descriptions for the
read and write ends of the pipe. Their integer values shall be
the two lowest available at the time of the pipe() call. The
O_NONBLOCK and FD_CLOEXEC flags shall be clear on both file
descriptors. (The fcntl() function can be used to set both these
flags.)
Data can be written to the file descriptor fildes[1] and read
from the file descriptor fildes[0]. A read on the
file descriptor fildes[0] shall access data written to the file
descriptor fildes[1] on a first-in-first-out basis.
It is unspecified whether fildes[0] is also open for writing
and whether fildes[1] is also open for reading.
A process has the pipe open for reading (correspondingly writing)
if it has a file descriptor open that refers to the read end,
fildes[0] (write end, fildes[1]).
Upon successful completion, pipe() shall mark for update the
st_atime, st_ctime, and st_mtime fields
of the pipe.
RETURN VALUE
Upon successful completion, 0 shall be returned; otherwise, -1 shall
be returned and errno set to indicate the error.
ERRORS
The pipe() function shall fail if:
EMFILE
More than {OPEN_MAX} minus two 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.
The following sections are informative.
EXAMPLES
None.
APPLICATION USAGE
None.
RATIONALE
The wording carefully avoids using the verb "to open" in order to
avoid any implication of use of open(); see also write()
.
FUTURE DIRECTIONS
None.
SEE ALSO
fcntl() , read() , write() , the
Base Definitions volume of IEEE Std 1003.1-2001, <fcntl.h>,
<unistd.h>
COPYRIGHT
Portions of this text are reprinted and reproduced in electronic form
from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
-- Portable Operating System Interface (POSIX), The Open Group Base
Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
Electrical and Electronics Engineers, Inc and The Open Group. In the
event of any discrepancy between this version and the original IEEE and
The Open Group Standard, the original IEEE and The Open Group Standard
is the referee document. The original Standard can be obtained online at
http://www.opengroup.org/unix/online.html .