PIPE(2V) — SYSTEM CALLS
NAME
pipe − create an interprocess communication channel
SYNOPSIS
int pipe(fd)
int fd[2];
DESCRIPTION
The pipe() system call creates an I/O mechanism called a pipe and returns two file descriptors, fd[0] and fd[1]. fd[0] is opened for reading and fd[1] is opened for writing. The O_NONBLOCK flag is clear on both file descriptors (see open(2V)). When the pipe is written using the descriptor fd[1] up to {PIPE_BUF} (see sysconf(2V)) bytes of data are buffered before the writing process is blocked. A read only file descriptor fd[0] accesses the data written to fd[1] on a FIFO (first-in-first-out) basis.
The standard programming model is that after the pipe has been set up, two (or more) cooperating processes (created by subsequent fork(2V) calls) will pass data through the pipe using read(2V) and write(2V).
Read calls on an empty pipe (no buffered data) with only one end (all write file descriptors closed) returns an EOF (end of file).
Pipes are really a special case of the socketpair(2) call and, in fact, are implemented as such in the system.
A SIGPIPE signal is generated if a write on a pipe with only one end is attempted.
Upon successful completion, pipe() marks for update the st_atime, st_ctime, and st_mtime fields of the pipe.
RETURN VALUES
pipe() returns:
0 on success.
−1 on failure and sets errno to indicate the error.
ERRORS
EFAULT The array fd is in an invalid area of the process’s address space.
EMFILE Too many descriptors are active.
ENFILE The system file table is full.
SEE ALSO
sh(1), fork(2V), read(2V), socketpair(2), write(2V)
BUGS
Should more than {PIPE_BUF} bytes be necessary in any pipe among a loop of processes, deadlock will occur.
Sun Release 4.1 — Last change: 21 January 1990