dup2()

Продублировать файловый дескриптор с указанием нового дескриптора

Прототип:

#include <unistd.h>
int dup2( int filedes,
int filedes2 );

Аргументы:

filedes
Файловый дескриптор, который необходимо продублировать.
filedes2
Число, которое будет использоваться в качестве нового файлового дескриптора.

Библиотека:

libc

Описание:

Функция dup2() дублирует файловый дескриптор, определяемый filedes. Значение нового дескриптора определяется аргументом filedes2. Если файл уже открыт с дескриптором filedes2, он будет закрыт перед дублированием.

Новый файловый дескриптор:

Вызов:

dup_filedes = dup2( filedes, filedes2 );

аналогичен:

close( filedes2 );
dup_filedes = fcntl( filedes, F_DUPFD, filedes2 );

Возвращаемое значение:

Значение filedes2 в случае успеха.

Если возникла ошибка, функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EBADF
Файловый дескриптор filedes не является допустимым дескриптором открытого файла или filedes2 находится вне зоны допустимых значений.
EMFILE
На данный момент уже используется OPEN_MAX файловых дескрипторов.
ENOSYS
Функция dup2() не реализована для файловой системы, определяемой filedes.

Примеры:

#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 системной библиотеки