NAME
pipe() — create an interprocess channel
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:
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
(see
streampipes(5))
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
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);
/* check process id of child process */
if ((pid = fork()) == (pid_t)0) {
close(1); /* close stdout */
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
pipe()
returns one of the following values:
- 0
Successful completion.
- -1
Failure.
errno
is set to indicate the error.
ERRORS
pipe()
sets
errno
to one of the following error values if the corresponding condition 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).
STANDARDS CONFORMANCE
pipe(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1