Другие функции для работы с файлами
В задачу данной книги не входит описание всех функций стандартных библиотек трансляторов Microsoft QC 2.5 и C 6.0, предназначенных для работы с дисками и файловой системой. Но мы приведем еще несколько интересных и полезных на наш взгляд функций.
Как мы уже отметили, программа может использовать два режима ввода/вывода для файлов - текстовый и двоичный. Для переключения этого режима для открытого файла можно использовать функцию setmode():
int setmode(int handle, int mode);
Первый параметр - файловый индекс. Второй параметр может принимать два значения:
O_TEXT | установить текстовый режим; |
O_BINARY | установить двоичный режим. |
Функция setmode() должна вызываться перед началом ввода/вывода в открытый файл.
Мы рассказывали о позиционировании внутри файла. Если вам нужно просто установить указатель позиции на начало файла, открытого для потокового ввода/вывода, вы можете воспользоваться функцией rewind():
void rewind(FILE *stream);
Если вам нужно переназначить ввод/вывод для стандартных устройств (потоков stdin, stdout, stderr), вы можете использовать функцию freopen():
FILE *freopen(char *filename, char *mode, FILE *stream);
Функция freopen() закрывает файл, с которым был связан поток stream, и переназначает этот поток файлу, определенному параметром filename. Параметр mode задается так же, как и для функции
fopen().
Можно переназначить файловый индекс для файла, открытого функцией open(). Для этого можно воспользоваться одной из двух функций - dup()
или dup2():
int dup(int handle);
int dup2(int handle1, int handle2);
Первая функция связывает с открытым файлом еще один файловый индекс. Этот индекс она возвращает при успешном завершении. В случае ошибки она возвращает значение -1.
Новый файловый индекс может быть использован для любых операций над файлом.
Функция dup2() переназначает файловый индекс handle2, связывая его с тем же файлом, которому соответствует файловый индекс handle1. Если во время вызова функции dup2() с файловым индексом handle2
связан какой-либо открытый файл, этот файл закрывается. В случае успешного завершения функция dup2() возвращает нулевое значение. Если произошла ошибка, возвращается значение -1.