MAN.9FRONT.ORG RTFM


     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 commu-
          nication.  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 termi-
          nates 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 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.