![]() |
![]() |
![]() |
Duplicate a file descriptor
#include <unistd.h> int dup2( int filedes, int filedes2 );
libc
The dup2() function duplicates the file descriptor specified by filedes. The number of the new file descriptor will be filedes2. If a file already is opened with this descriptor, the file is closed before the duplication is attempted.
The new file descriptor:
Calling:
dup_filedes = dup2( filedes, filedes2 );
Is the same as:
close( filedes2 ); dup_filedes = fcntl( filedes , F_DUPFD, filedes2 );
The value of filedes2 for success, or -1 if an error occurs (errno is set).
#include <fcntl.h> #include <unistd.h> #include <sys/stat.h> #include <stdlib.h> int main( void ) { int filedes , dup_filedes ; filedes = open( "file", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP ); if( filedes != -1 ) { dup_filedes = 4; if( dup2( filedes, dup_filedes ) != -1 ) { /* process file */ /* ... */ close( dup_filedes ); } close( filedes ); return EXIT_SUCCESS; } return EXIT_FAILURE; }
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
chsize(), close(), creat(), dup(), eof(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fcntl(), fileno(), fstat(), isatty(), lseek(), open(), read(), sopen(), stat(), tell(), umask(), write()
![]() |
![]() |
![]() |