pipe Subroutine
Purpose
Creates an interprocess channel.
Library
Standard
C Library (libc.a)
Syntax
#include <unistd.h>
int pipe ( FileDescriptor)
int FileDescriptor[2];Description
The pipe subroutine creates an interprocess channel that
is called a pipe and returns two file descriptors,
FileDescriptor[0] and
FileDescriptor[1]. FileDescriptor[0]
is opened for reading and FileDescriptor[1] is opened for
writing.
A read operation on the
FileDescriptor[0] parameter accesses the data that is written to
the FileDescriptor[1] parameter on a first-in, first-out (FIFO)
basis.
Write requests of PIPE_BUF bytes or fewer will not be
interleaved (mixed) with data from other processes doing writes on the same pipe.
PIPE_BUF is a system variable that is described in the pathconf
subroutine. Writes of greater than PIPE_BUF bytes may have data that is
interleaved, on arbitrary boundaries, with other writes.
If O_NONBLOCK or O_NDELAY are set, writes
requests of PIPE_BUF bytes or fewer will either succeed completely or fail and
return -1 with the errno global variable set to EAGAIN. A write
request for more than PIPE_BUF bytes will either transfer what it can and return
the number of bytes actually written, or transfer no data and return -1 with the
errno global variable set to EAGAIN.
Parameters
| Item | Description |
|---|---|
| FileDescriptor | Specifies the address of an array of two integers into which the new file descriptors are placed. |
Return Values
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned, and the errno global variable is set to identify the error.
Error Codes
The pipe subroutine is unsuccessful if one or more the following are true:
| Item | Description |
|---|---|
EFAULT |
The FileDescriptor parameter points to a location outside of the allocated address space of the process. |
EMFILE |
The number of open of file descriptors exceeds the OPEN_MAX value. |
ENFILE |
The system file table is full, or the device containing pipes has no free i-nodes. |