Функция
#include<io.h>
int dup2(int oldhandle, int newhandle);
возвращают дескриптор файла, который по следующим позициям совпадает с оригинальным дескриптором:
- тот же самый открываемый файл или устройство;
- тот же самый адресный указатель файла (то есть изменение одного адресного указателя приводит к изменению другого);
-тот же самый метод доступа (чтение, запись, чтение/запись).
dup2 создает новый дескриптор со значением newhandle Если файл связанный с дескриптором newhandle открыт, то при вызове dup2 он закрывается.
Переменная newhandle и oldhandle - это дескрипторы файлов, и получают значения при вызове функций creat,_creat,_open, open, dup, dup2.
При успешном завершении функция dup2 возвращает 0, значение в противном случае функция dup2 возвращает значение -1.
При возникновении ошибки глобальная переменная errno получает одно из следующих значений:
EMFILE - Слишком много открытых файлов.
EBADF - Неверный номер файла.
Пример:
#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;
}
Функции ввода-вывода
#include <stdio.h> int _fgetchar(void); | Возвращает символ из файла стандартного ввода. |
#include <stdio.h> int fgetc(FILE *stream); | Возвращает символ из открытого файла, описываемого переменной типа FILE, на которую указывает stream. |
#include <stdio.h> int getc(FILE *stream); | Возвращает символ из открытого файла, описываемого переменной типа FILE, на которую указывает stream. Является макроопределением через функцию _fgetc(). |
#include <stdio.h> int ungetc(int c, FILE *stream); | Возвращает символ int c назад в поток stream. Следующая операция чтения из файла stream будет возвращать символ c. |