NAME
pipe – create an interprocess channel |
SYNOPSIS
#include <u.h> #include <libc.h>
int pipe(int fd[2]) |
DESCRIPTION
Pipe creates a buffered channel for interprocess I/O communication.
Two file descriptors are returned in fd. Data written to fd[1]
is available for reading from fd[0] and data written to fd[0]
is available for reading from fd[1]. After the pipe has been established, cooperating processes created by subsequent fork(2) calls may pass data through the pipe with read and write calls. The bytes placed on a pipe by one write are contiguous even if many processes are writing. Write boundaries are preserved: each read terminates when the read buffer is full or after reading the last byte of a write, whichever comes first. The number of bytes available to a read(2) is reported in the Length field returned by fstat or dirfstat on a pipe (see stat(2)). The limit of data bytes in the pipe's buffer can be set by fwstat or dirfwstat on either of the pipe's descriptors.
When all the data has been read from a pipe and the writer has
closed the pipe or exited, read(2) will return 0 bytes. Writes
to a pipe with no reader will generate a note sys: write on closed
pipe. |
SOURCE
/sys/src/libc/9syscall |
SEE ALSO
intro(2), read(2), pipe(3) |
DIAGNOSTICS
Sets errstr. |
BUGS
If a read or a write of a pipe is interrupted, some unknown number
of bytes may have been transferred. When a read from a pipe returns 0 bytes, it usually means end of file but is indistinguishable from reading the result of an explicit write of zero bytes. |