pipe(2)                                                             pipe(2)
 NAME    [Toc]    [Back]
      pipe - create an interprocess channel
 SYNOPSIS    [Toc]    [Back]
      int pipe(int fildes[2]);
 DESCRIPTION    [Toc]    [Back]
      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:
      +  STREAMS/UX must be installed.
      +  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.)
      +  The tunable parameter "streampipes" must be set to 1 in the
         /stand/system file.  (This is not automatically done when
         STREAMS/UX is installed.)
      +  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    [Toc]    [Back]
      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 11i Version 2: August 2003
 pipe(2)                                                             pipe(2)
           dup (pipefd[1]); /* points pipefd at file descriptor */
           close (pipefd[0]);
           execlp ( ls", ls , (char *)0);
      }
      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    [Toc]    [Back]
      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    [Toc]    [Back]
      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    [Toc]    [Back]
      sh(1), read(2), write(2), popen(3S), streamio(7).
 STANDARDS CONFORMANCE    [Toc]    [Back]
      pipe(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
 Hewlett-Packard Company            - 2 -   HP-UX 11i Version 2: August 2003 [ Back ] |