CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
dup2
dup2
Функция Дублирует дескриптор файла. Синтаксис #include<io.h> 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. Смотрите также _close, close, _creat, creat, creatnew, creattemp, dup2, fopen, _open, open. Пример: #include<sys\stat.h> #include<string.h> #include<fcntl.h> #include<io.h> #include<stdio.h> #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; }