87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 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.
 | 
						|
.\"
 | 
						|
.\"	@(#)dup.2	6.3 (Berkeley) 5/13/86
 | 
						|
.\"
 | 
						|
.TH DUP 2 "May 13, 1986"
 | 
						|
.UC 4
 | 
						|
.SH NAME
 | 
						|
dup, dup2 \- duplicate a descriptor
 | 
						|
.SH SYNOPSIS
 | 
						|
.nf
 | 
						|
.ft B
 | 
						|
#include <unistd.h>
 | 
						|
 | 
						|
int dup(int \fIoldd\fP)
 | 
						|
int dup2(int \fIoldd\fP, int \fInewd\fP)
 | 
						|
.SH DESCRIPTION
 | 
						|
.B Dup
 | 
						|
duplicates an existing descriptor.
 | 
						|
The argument \fIoldd\fP is a small non-negative integer index in
 | 
						|
the per-process descriptor table.  The value must be less
 | 
						|
than OPEN_MAX, the size of the table.
 | 
						|
The new descriptor returned by the call, let's name it
 | 
						|
.I newd,
 | 
						|
is the lowest numbered descriptor that is
 | 
						|
not currently in use by the process.
 | 
						|
.PP
 | 
						|
The object referenced by the descriptor does not distinguish
 | 
						|
between references using \fIoldd\fP and \fInewd\fP in any way.
 | 
						|
Thus if \fInewd\fP and \fIoldd\fP are duplicate references to an open
 | 
						|
file,
 | 
						|
.BR read (2),
 | 
						|
.BR write (2)
 | 
						|
and
 | 
						|
.BR lseek (2)
 | 
						|
calls all move a single pointer into the file,
 | 
						|
and append mode, non-blocking I/O and asynchronous I/O options
 | 
						|
are shared between the references.
 | 
						|
If a separate pointer into the file is desired, a different
 | 
						|
object reference to the file must be obtained by issuing an
 | 
						|
additional
 | 
						|
.BR open (2)
 | 
						|
call.
 | 
						|
The close-on-exec flag on the new file descriptor is unset.
 | 
						|
.PP
 | 
						|
In the second form of the call, the value of
 | 
						|
.IR newd
 | 
						|
desired is specified.  If this descriptor is already
 | 
						|
in use, the descriptor is first deallocated as if a
 | 
						|
.BR close (2)
 | 
						|
call had been done first.
 | 
						|
.I Newd
 | 
						|
is not closed if it equals
 | 
						|
.IR oldd .
 | 
						|
.SH "RETURN VALUE
 | 
						|
The value \-1 is returned if an error occurs in either call.
 | 
						|
The external variable
 | 
						|
.B errno
 | 
						|
indicates the cause of the error.
 | 
						|
.SH "ERRORS
 | 
						|
.B Dup
 | 
						|
and
 | 
						|
.B dup2
 | 
						|
fail if:
 | 
						|
.TP 15
 | 
						|
[EBADF]
 | 
						|
\fIOldd\fP or
 | 
						|
\fInewd\fP is not a valid active descriptor
 | 
						|
.TP 15
 | 
						|
[EMFILE]
 | 
						|
Too many descriptors are active.
 | 
						|
.SH NOTES
 | 
						|
.B Dup
 | 
						|
and
 | 
						|
.B dup2
 | 
						|
are now implemented using the
 | 
						|
.B F_DUPFD
 | 
						|
function of
 | 
						|
.BR fcntl (2),
 | 
						|
although the old system call interfaces still exist to support old programs.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR open (2),
 | 
						|
.BR close (2),
 | 
						|
.BR fcntl (2),
 | 
						|
.BR pipe (2).
 |