Продублировать файловый дескриптор с указанием нового дескриптора
#include <unistd.h>int dup2( int filedes,int filedes2 );
libc
Функция dup2() дублирует файловый дескриптор, определяемый filedes. Значение нового дескриптора определяется аргументом filedes2. Если файл уже открыт с дескриптором filedes2, он будет закрыт перед дублированием.
Новый файловый дескриптор:
Вызов:
dup_filedes = dup2( filedes, filedes2 );
аналогичен:
close( filedes2 );dup_filedes = fcntl( filedes, F_DUPFD, filedes2 );
Значение filedes2 в случае успеха.
Если возникла ошибка, функция возвращает -1
, код ошибки записывается в errno.
OPEN_MAX
файловых дескрипторов. #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);}
POSIX 1003.1
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()
Предыдущий раздел: Описание API системной библиотеки