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; }