NAME

     dup, dup2 - duplicate a file descriptor


SYNOPSIS

     #include <unistd.h>

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


DESCRIPTION

     dup and dup2 create a copy of the file descriptor oldfd.

     The old and new descriptors  may  be  used  interchangeably.
     They  share  locks,  file  position  pointers and flags; for
     example, if the file position is modified by using lseek  on
     one of the descriptors, the position is also changed for the
     other.

     The two descriptors do not  share  the  close-on-exec  flag,
     however.

     dup uses the lowest-numbered unused descriptor for  the  new
     descriptor.

     dup2 makes newfd be the copy of oldfd, closing  newfd  first
     if necessary.


RETURN VALUE

     dup and dup2 return the new descriptor, or -1  if  an  error
     occurred (in which case, errno is set appropriately).


ERRORS

     EBADF
          oldfd isn't an open file descriptor, or newfd is out of
          the allowed range for file descriptors.

     EMFILE
          The process already has  the  maximum  number  of  file
          descriptors open and tried to open a new one.


WARNING

     The error returned by dup2 is different to that returned  by
     fcntl(...,F_DUPFD,...)   when newfd is out of range. On some
     systems dup2 also sometimes returns EINVAL like F_DUPFD.


CONFORMING TO

     SVr4, SVID, POSIX, X/OPEN, BSD  4.3.  SVr4  documents  addi-
     tional  EINTR  and  ENOLINK  error conditions.  POSIX.1 adds
     EINTR.


SEE ALSO

      fcntl (2), open (2), close (2).