The Single UNIX ® Specification, Version 2
Copyright © 1997 The Open Group


pipe - create an interprocess channel


#include <unistd.h>

int pipe(int fildes[2]);


The pipe() function will create a pipe and place two file descriptors, one each into the arguments fildes[0] and fildes[1], that refer to the open file descriptions for the read and write ends of the pipe. Their integer values will be the two lowest available at the time of the pipe() call. The O_NONBLOCK and FD_CLOEXEC flags shall be clear on both file descriptors. (The fcntl() function can be used to set both these flags.)

Data can be written to the file descriptor fildes[1] and read from file descriptor fildes[0]. A read on the file descriptor fildes[0] will access data written to file descriptor fildes[1] on a first-in-first-out basis. It is unspecified whether fildes[0] is also open for writing and whether fildes[1] is also open for reading.

A process has the pipe open for reading (correspondingly writing) if it has a file descriptor open that refers to the read end, fildes[0] (write end, fildes[1]).

Upon successful completion, pipe() will mark for update the st_atime, st_ctime and st_mtime fields of the pipe.


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


The pipe() function will fail if:
More than {OPEN_MAX} minus two file descriptors are already in use by this process.
The number of simultaneously open files in the system would exceed a system-imposed limit.








fcntl(), read(), write(), <fcntl.h>, <unistd.h>.


Derived from Issue 1 of the SVID.

UNIX ® is a registered Trademark of The Open Group.
Copyright © 1997 The Open Group
[ Main Index | XSH | XCU | XBD | XCURSES | XNS ]