dup2

Функция Дублирует дескриптор файла.

Синтаксис #include

int dup2(int oldhandle, int newhandle);

Файл, содержащий io.h прототип

Описание Функция dup2 возвращают дескриптор файла, который по следующим позициям совпадает с оригинальным дескриптором:

- тот же самый открываемый файл или устройство;

- тот же самый адресный указатель файла (то есть изменение одного адресного указателя приводит к изменению другого);

-тот же самый метод доступа (чтение, запись, чте- ние/запись).

dup2 создает новый дескриптор со значением newhandle Если файл связанный с дескриптором newhandle открыт, то при вызове dup2 он закрывает- ся.

Переменная newhandle и oldhandle - это дескрипторы файлов, и получают значения при вызове функций creat,_creat,_open, open, dup, dup2.

Возвращаемое При успешном завершении функция dup2 возвращает 0, значение в противном случае функция dup2 возвращает значе- ние -1.

При возникновении ошибки глобальная переменная errno получает одно из следующих значений:

EMFILE - Слишком много открытых файлов. EBADF - Неверный номер файла.

Переносимость Функция dup поддерживается на системах UNIX, кроме system III.

Смотрите также ,

Пример:

#include

#include

#include

#include

#include

#define STDOUT 1

int main(void) { int fptr,oldstdout; char msg[] = "Тестовый пример"; /* создание файла */ fptr = open("DUMMY.FIL",O_CREAT|O_RDWR,S_IREAD|S_IWRITE); if(fptr) { /* создать дополнительный дескриптор для stdout */ oldstdout = dup(STDOUT); /* перенаправить стандартный вывод в файл, путем дублирования его дескриптора */ dup2(fptr,STDOUT); /* закрыть файл */ close(fptr); /* было перенаправлено в DUMMY.FIL */ write(STDOUT,msg,strlen(msg)); /* восстановить исходный дескриптор stdout */ dup2(oldstdout,STDOUT); /* закрыть второй дескриптор stdout */ close(oldstdout); } else { printf("Ошибка при открытии файла. \n"); } return 0; }