pipe(2) manual page
Table of Contents
pipe - create an interprocess channel
#include <unistd.h>
int
pipe(int fildes[2]);
Async-Signal-Safe
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 O_NDELAY and O_NONBLOCK
flags are cleared.
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.
The FD_CLOEXEC flag will
be clear on both file descriptors.
Upon successful completion pipe() marks
for update the st_atime, st_ctime, and st_mtime fields of the pipe.
Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned and errno is set to indicate the error.
pipe()
fails if:
- EMFILE
- If {OPEN_MAX}-1 or more file descriptors are currently
open for this process.
- ENFILE
- A file table entry could not be allocated.
sh(1)
, fcntl(2)
, getmsg(2)
, poll(2)
, putmsg(2)
, read(2)
, write(2)
,
streamio(7I)
Since a pipe is bi-directional, there are two separate
flows of data. Therefore, the size (st_size) returned by a call to fstat
() 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).
Table of Contents