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)).

          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.