DUP(2)                           System Calls                           DUP(2)




NAME

       dup, dup2 - duplicate an existing file descriptor


SYNOPSIS

       #include <unistd.h>

       int dup (int oldfd);
       int dup2 (int oldfd, int newfd);


DESCRIPTION

       Dup duplicates an existing file descriptor and returns its value to the
       calling process.  The argument oldfd is a  small  non-negative  integer
       index in the per-process descriptor table.  The value must be less than
       the size of the table, which is returned by getdtablesize(2).  The  new
       descriptor  returned by the call is the lowest numbered descriptor cur‐
       rently not in use by the process.

       The file referenced by the  descriptor  does  not  distinguish  between
       oldfd and newfd in any way.  Thus if newfd and oldfd are duplicate ref‐
       erences to an open file, read(2), write(2) and 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 sepa‐
       rate  pointer  into  the  file is desired, a different reference to the
       file must be obtained by  issuing  an  additional  open(2)  call.   The
       close-on-exec flag on the new file descriptor is unset.

       In  dup2,  the value of the new descriptor newfd is specified.  If this
       descriptor is already in use, the descriptor is first deallocated as if
       a close(2) call had been done first.


RETURN VALUES

       The value -1 is returned if an error occurs in either call.  The exter‐
       nal variable errno indicates the cause of the error.


ERRORS

       Dup and dup2 fail if:

              EBADF  Oldfd or newfd is not a valid active descriptor

              EMFILE Too many descriptors are active.


SEE ALSO

       accept(2), open(2), close(2),  fcntl(2),  pipe(2),  socket(2),  socket
       pair(2), getdtablesize(2)


STANDARDS

       Dup and dup2 are expected to conform to IEEE Std 1003.1-1988 (POSIX).



GNO                             16 January 1997                         DUP(2)

Man(1) output converted with man2html