SYS-PIPE(2) SYS-PIPE(2)
NAME
pipe - create an interprocess channel
SYNOPSIS
include "sys.m";
sys := load Sys Sys->PATH;
pipe: fn(fds: array of ref FD): int;
DESCRIPTION
Pipe creates a buffered channel for interprocess I/O via
file descriptors. It allocates a pipe from the pipe device
and returns in the array fds file descriptors for the two
pipe ends. Both returned file descriptors are opened for
both reading and writing (Sys->ORDWR). Data written on one
file descriptor can be read from the other. The details of
flow control and buffering are given in pipe(3). When no
references remain to the file descriptor representing one
end of a pipe, and all remaining data has been read at the
other end, subsequent reads at that end will return 0 bytes.
Writes to a pipe with no reader produce an exception.
The array fds passed to the system call must have a length
of at least 2; only entries 0 and 1 are updated.
Limbo applications typically use typed Limbo channels, not
pipes, for efficient communication by cooperating processes.
Pipes are still useful, however, to connect applications
that do not (or cannot) share such channels, or when a sys-
tem interface requires a file descriptor. For instance, a
process that serves the Styx protocol can pass the file
descriptor for one end of a pipe to Sys->mount (see sys-
bind(2)), and read and write Styx messages on the other end
of the pipe.
DIAGNOSTICS
Returns 0 on success; -1 on failure.
SEE ALSO
pipe(3)
Page 1 Plan 9 (printed 10/20/25)