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 ] |