pipe(2) pipe(2)
NAME
pipe - create an interprocess communication channel
SYNOPSIS
#include <unistd.h>
int pipe(int fildes[2]);
DESCRIPTION
pipe() creates 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 ONDELAY and ONONBLOCK flags are cleared.
A read from fildes[0] accesses the data written to fildes[1] on a FIFO
basis and a read from fildes[1] accesses the data written to fildes[0]
also on a FIFO basis. It is unspecified whether fildes[0] is also open
for writing and whether fildes[1] is also open for reading.
The FDCLOEXEC flag will be clear on both file descriptors.
Upon successful completion pipe() marks for update the statime,
stctime, and stmtime fields of the pipe.
ERRORS
The following error code descriptions are function-specific. You will
find a general description in introprm2(2) or in errno(5).
pipe() fails if:
EMFILE If OPENMAX-1 or more file descriptors are currently open
for this process.
ENFILE A file table entry could not be allocated.
RESULT
Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned and errno is set to indicate the error.
NOTES
Since a pipe is bi-directional, there are two separate flows of data.
Therefore, the size (stsize) 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
(stsize) 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).
SEE ALSO
sh(1), fcntl(2), getmsg(2), poll(2), putmsg(2), read(2), write(2),
unistd(4), streamio(7).
Page 1 Reliant UNIX 5.44 Printed 11/98