pipe(2)
pipe --
create an interprocess 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
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.
If pipe succeeds, it marks for update the
st_atime, st_ctime, and st_mtime fields of the pipe.
Return values
On success, pipe returns 0.
On failure, pipe returns -1 and sets errno to identify the error.
Errors
In the following conditions, pipe fails and sets errno to:
EMFILE-
The maximum number of file descriptors are currently open.
ENFILE-
A file table entry could not be allocated.
References
fcntl(2),
getmsg(2),
poll(2),
putmsg(2),
read(2),
sh(1),
stat(2),
streamio(7),
write(2)
Notices
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).
See
stat(2).
Considerations for threads programming
Open file descriptors are a process resource
and available to any sibling thread;
if used concurrently, actions by one thread can interfere with
those of a sibling.
For example, data read from a pipe (destructive) by one thread is
not available to siblings.
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004