CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
dup
dup
Функция Дублирует дескриптор файла. Синтаксис #include<io.h> int dup(int handle); Файл, содержащий io.h прототип Описание Функция dup возвращает дескриптор файла, который по следующим позициям совпадает с оригинальным дескриптором: - Тот же самый открываемый файл или устройство. - Тот же самый адресный указатель файла (то есть изменение одного адресного указателя приводит к изменению другого). - Тот же самый метод доступа (чтение, запись, чтение/запись). Переменная handle получает значение при вызове функций creat,_creat,_open, open, dup, dup2. Возвращаемое При успешном завершении функция dup возвращает це- значение лое неотрицательное число, обозначающее соответст- вующий дескриптор файла; в противном случае функция dup возвращает значение -1. При возникновении ошибки глобальная переменная errno получает одно из следующих значений: EMFILE - Слишком много открытых файлов. EBADF - Неверный номер файла. Переносимость Функция dup поддерживается в системах UNIX. Смотрите также _close, close, _creat, creat, creatnew, creattemp, dup2, fopen, _open, open. Пример: #include<string.h> #include<stdio.h> #include<conio.h> #include<io.h> void flash(FILE *stream); int main(void) { FILE *fp; char msg[] = "Тестовый пример"; /* создание файла */ fp = fopen("DUMMY.FIL,"w"); if(fp) { /* записать в файл данные */ fwrite(msg,strlen(msg),1,fp); clrscr(); printf(" Для сброса буферов файла на диск нажмите клавишу "); getch(); /* Сброс буферов файда на диск без его закрытия */ flush(fp); printf("Буфера записаны, для завершения нажмите клавишу."); getch(); } else { printf("Ошибка при открытии файла\n"); } return 0; } void flash(FILE *stream) { int duphandle; /* сброс внутреннего буфера TC */ fflash(stream); /* сдублировать дескриптор файла */ duphandle = dup(fileno(stream)); /* закрыть второй дескриптор, для сброса внутренних буферов DOS */ close(duphandle); }