pipe(2)

pipe2

Create descriptor pair for interprocess communication

Usage

#include <unistd.h>

int

pipe(int fildes[2]);

Overview

The pipe() function creates a pipe (an object that allows unidirectional data flow) and allocates a pair of file descriptors. The first descriptor connects to the read end of the pipe; the second connects to the write end.

Data written to fildes[1] appears on (i.e., can be read from) fildes[0]. This allows the output of one program to be sent to another program: the source's standard output is set up to be the write end of the pipe; the sink's standard input is set up to be the read end of the pipe. The pipe itself persists until all of its associated descriptors are closed.

A pipe whose read or write end has been closed is considered widowed. Writing on such a pipe causes the writing process to receive a SIGPIPE signal. Widowing a pipe is the only way to deliver end-of-file to a reader: after the reader consumes any buffered data, reading a widowed pipe returns a zero count.

The generation of the SIGPIPE signal can be suppressed using the F_SETNOSIGPIPE fcntl command.

Return values

On successful creation of the pipe, zero is returned. Otherwise, a value of -1 is returned and the variable errno set to indicate the error.

Errors

The pipe() call will fail if:

[EFAULT]

The fildes buffer is in an invalid area of the process's address space.

[EMFILE]

Too many descriptors are active.

[ENFILE]

The system file table is full.

Releases

155 releases since Mac OS X 10.0; the text changed 2 times.

  1. 10.0–10.4.11
  2. 10.5–10.6.8
  3. 10.7–26.5

History

A pipe() function call appeared in Version 6 AT&T UNIX.

From xnu 12377.121.6 in macOS 26.5. Parsed by carta from the page's mdoc source.