dup and dup2 create a copy of the file descriptor oldfd.
After successful return of dup or dup2, 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
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.