xref: /plan9/sys/man/2/pipe (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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)).

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.