Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (HP-UX-11.11)
Apropos / Subsearch:
optional field

 pipe(2)							     pipe(2)

      pipe - create an interprocess channel

      int pipe(int fildes[2]);

      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.

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

      #include <&lt&lt&lt;sys/types.h>&gt&gt&gt;
      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 11i: November 2000

 pipe(2)							     pipe(2)

	   dup (pipefd[1]); /* points pipefd at file descriptor */
	   close (pipefd[0]);
	   execlp ( ls", ls , (char *)0);
      else if (pid >&gt&gt&gt; (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 */

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

      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

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

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

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

 Hewlett-Packard Company	    - 2 -   HP-UX Release 11i: November 2000