#include <unistd.h> int dup(int fildes);
The dup() function returns a new file descriptor having the following in common with the original open file descriptor fildes:
same open file (or pipe)
same file pointer (that is, both file descriptors share one file pointer)
same access mode (read, write or read/write).
The new file descriptor is set to remain open across exec functions (see fcntl(2)).
The file descriptor returned is the lowest one available.
The dup(fildes) function call is equivalent to:
fcntl(fildes, F_DUPFD, 0)
Upon successful completion, a non-negative integer representing the file descriptor is returned. Otherwise, −1 is returned and errno is set to indicate the error.
The dup() function will fail if:
The fildes argument is not a valid open file descriptor.
A signal was caught during the execution of the dup() function.
The process has too many open files (see getrlimit(2)).
The fildes argument is on a remote machine and the link to that machine is no longer active.
See attributes(5) for descriptions of the following attributes: