90 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" Copyright (c) 1980 Regents of the University of California.
 | 
						|
.\" All rights reserved.  The Berkeley software License Agreement
 | 
						|
.\" specifies the terms and conditions for redistribution.
 | 
						|
.\"
 | 
						|
.\"	@(#)pipe.2	6.2 (Berkeley) 8/26/85
 | 
						|
.\"
 | 
						|
.TH PIPE 2 "August 26, 1985"
 | 
						|
.UC 4
 | 
						|
.SH NAME
 | 
						|
pipe \- create an interprocess communication channel
 | 
						|
.SH SYNOPSIS
 | 
						|
.nf
 | 
						|
.ft B
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
int pipe(int \fIfildes\fP[2])
 | 
						|
.fi
 | 
						|
.ft R
 | 
						|
.SH DESCRIPTION
 | 
						|
The
 | 
						|
.B pipe
 | 
						|
system call
 | 
						|
creates an I/O mechanism called a pipe.
 | 
						|
The file descriptors returned can
 | 
						|
be used in read and write operations.
 | 
						|
When the pipe is written using the descriptor
 | 
						|
.IR fildes [1]
 | 
						|
up to PIPE_MAX bytes of data are buffered
 | 
						|
before the writing process is suspended.
 | 
						|
A read using the descriptor
 | 
						|
.IR fildes [0]
 | 
						|
will pick up the data.
 | 
						|
.PP
 | 
						|
PIPE_MAX equals 7168 under Minix, but note that most systems use 4096.
 | 
						|
.PP
 | 
						|
It is assumed that after the
 | 
						|
pipe has been set up,
 | 
						|
two (or more)
 | 
						|
cooperating processes
 | 
						|
(created by subsequent
 | 
						|
.B fork
 | 
						|
calls)
 | 
						|
will pass data through the
 | 
						|
pipe with
 | 
						|
.B read
 | 
						|
and
 | 
						|
.B write
 | 
						|
calls.
 | 
						|
.PP
 | 
						|
The shell has a syntax
 | 
						|
to set up a linear array of processes
 | 
						|
connected by pipes.
 | 
						|
.PP
 | 
						|
Read calls on an empty
 | 
						|
pipe (no buffered data) with only one end
 | 
						|
(all write file descriptors closed)
 | 
						|
returns an end-of-file.
 | 
						|
.PP
 | 
						|
The signal SIGPIPE is generated if a write on a pipe with only one end
 | 
						|
is attempted.
 | 
						|
.SH "RETURN VALUE
 | 
						|
The function value zero is returned if the
 | 
						|
pipe was created; \-1 if an error occurred.
 | 
						|
.SH ERRORS
 | 
						|
The \fBpipe\fP call will fail if:
 | 
						|
.TP 15
 | 
						|
[EMFILE]
 | 
						|
Too many descriptors are active.
 | 
						|
.TP 15
 | 
						|
[ENFILE]
 | 
						|
The system file table is full.
 | 
						|
.TP 15
 | 
						|
[ENOSPC]
 | 
						|
The pipe file system (usually the root file system) has no free inodes.
 | 
						|
.TP 15
 | 
						|
[EFAULT]
 | 
						|
The \fIfildes\fP buffer is in an invalid area of the process's address
 | 
						|
space.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR sh (1),
 | 
						|
.BR read (2),
 | 
						|
.BR write (2),
 | 
						|
.BR fork (2).
 | 
						|
.SH NOTES
 | 
						|
Writes may return ENOSPC errors if no pipe data can be buffered, because
 | 
						|
the pipe file system is full.
 | 
						|
.SH BUGS
 | 
						|
Should more than PIPE_MAX bytes be necessary in any
 | 
						|
pipe among a loop of processes, deadlock will occur.
 |