1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- .TH PIPE 2
- .SH NAME
- pipe \- create an interprocess channel
- .SH SYNOPSIS
- .B #include <u.h>
- .br
- .B #include <libc.h>
- .PP
- .B
- int pipe(int fd[2])
- .SH DESCRIPTION
- .I Pipe
- creates a buffered channel for interprocess I/O communication.
- Two file descriptors are returned in
- .IR fd .
- Data written to
- .B fd[1]
- is available for reading from
- .B fd[0]
- and data written to
- .B fd[0]
- is available for reading from
- .BR fd[1] .
- .PP
- After the pipe has been established,
- cooperating processes
- created by subsequent
- .IR fork (2)
- calls may pass data through the
- pipe with
- .I read
- and
- .I write
- calls.
- The bytes placed on a pipe
- by one
- .I 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.
- .PP
- The number of bytes available to a
- .IR read (2)
- is reported
- in the
- .B Length
- field returned by
- .I fstat
- or
- .I dirfstat
- on a pipe (see
- .IR stat (2)).
- .PP
- When all the data has been read from a pipe and the writer has closed the pipe or exited,
- .IR read (2)
- will return 0 bytes. Writes to a pipe with no reader will generate a note
- .BR "sys: write on closed pipe" .
- .SH SOURCE
- .B /sys/src/libc/9syscall
- .SH SEE ALSO
- .IR intro (2),
- .IR read (2),
- .IR pipe (3)
- .SH DIAGNOSTICS
- Sets
- .IR errstr .
- .SH BUGS
- If a read or a write of a pipe is interrupted, some unknown
- number of bytes may have been transferred.
- .br
- 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.
|