pipe(2)                                                             pipe(2)




 NAME
      pipe - create an interprocess channel

 SYNOPSIS
      int pipe(int fildes[2]);

 DESCRIPTION
      pipe() creates an I/O mechanism called a pipe and returns two file
      descriptors, fildes[0] and fildes[1].  fildes[0] is opened for reading
      and fildes[1] is opened for writing.

      A read-only file descriptor fildes[0] accesses the data written to
      fildes[1] on a first-in-first-out (FIFO) basis.  For details of the
      I/O behavior of pipes see read(2) and write(2).

      By default, HP-UX pipes are not STREAMS-based.  It is possible to
      generate the kernel so that all pipes created on a system are
      STREAMS-based.  This can only be done for HP-UX releases 10.0 and
      later.  STREAMS-based FIFOs (created by mknod or mkfifo) are not
      supported on HP-UX.

      To generate a kernel that supports STREAMS-based pipes:

      o  STREAMS/UX must be installed.

      o  The module pipemod and the driver pipedev must be included in the
         /stand/system file.  (When STREAMS/UX is installed, pipemod and
         pipedev are automatically added to the system file.)

      o  The tunable parameter "streampipes" must be set to 1 in the
         /stand/system file.  (This is not automatically done when
         STREAMS/UX is installed.)

      o  The kernel must be generated and the system rebooted.  Once this is
         done, all pipes created by pipe() will be STREAMS-based.

      For more information, see STREAMS/UX for the HP 9000 Reference Manual.

 EXAMPLES
      The following example uses pipe() to implement the command string ls |
      sort:

           #include <sys/types.h>
           pid_t pid;
           int pipefd[2];

           /*  Assumes file descriptor 0 and 1 are open  */
           pipe (pipefd);

           if ((pid = fork()) == (pid_t)0) /* check process id of child process */ {
                close(1);      /* close stdout */



 Hewlett-Packard Company            - 1 -    HP-UX Release 10.20:  July 1996






 pipe(2)                                                             pipe(2)




                dup (pipefd[1]); /* points pipefd at file descriptor */
                close (pipefd[0]);
                execlp ("ls", "ls", (char *)0);  /* child process does ls */
           }
           else if (pid > (pid_t)0) {
                close(0); /* close stdin  */
                dup (pipefd[0]);
                /* point the child's standard output to parent's standard input */
                close (pipefd[1]);
                execlp ("sort", "sort", (char *)0); /* parent process does sort */
           }

 RETURN VALUE
      Upon successful completion, a value of 0 is returned.  Otherwise, a
      value of -1 is returned and errno is set to indicate the error.

 ERRORS
      pipe() fails if one or more of the following is true:

      [EMFILE]       NFILE-1 or more file descriptors are currently open.

      [ENFILE]       The system file table is full.

      [ENOSPC]       The file system lacks sufficient space to create the
                     pipe.

      [ENOSR]        Could not allocate resources for both Stream heads
                     (STREAMS-based pipes only).

 SEE ALSO
      sh(1), read(2), write(2), popen(3S), streamio(7).

 STANDARDS CONFORMANCE
      pipe(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1




















 Hewlett-Packard Company            - 2 -    HP-UX Release 10.20:  July 1996