int pipe(fd) int fd[2];
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.
pipe() returns:
Should more than {PIPE_BUF} bytes be necessary in any pipe among a loop of processes, deadlock will occur.
Created by unroff & hp-tools. © somebody (See intro for details). All Rights Reserved. Last modified 11/5/97