Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sh(1)

read(2)

write(2)

popen(3S)

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).

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) {
     close(1); /* close stdout */
     dup (pipefd[1]);
     close (pipefd[0]);
     execlp ("ls", "ls", (char *)0);
}
else if (pid > (pid_t)0) {
     close(0);/* close stdin  */
     dup (pipefd[0]);
     close (pipefd[1]);
     execlp ("sort", "sort", (char *)0);
}

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. 

SEE ALSO

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

STANDARDS CONFORMANCE

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

Hewlett-Packard Company  —  HP-UX Release 9.0: August 1992

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026