Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ (2) — Plan9 4th Edition

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

read(2)

pipe(3)

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.

Plan 9  —  February 18, 2000

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026