PIPE(2)PIPE(2)
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
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.