Updated: April 19, 2023 |
Duplicate a file descriptor, specifying the new descriptor
#include <unistd.h> int dup2( int filedes, int filedes2 );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
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, unless filedes2 is the same as filedes, in which case dup2() returns filedes2 without closing the file.
The new file descriptor:
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 |