Кроме рассмотренной функции fseek( ), в библиотеке функций языка Си находятся следующие функции для работы с указателями текущей позиции в потоке:
long ftelI(FILE *) - получить значение указателя текущей позиции в потоке;
void rewind(FILE *) - установить указатель текущей позиции в потоке на начало потока.
Необходимо иметь в виду, что недопустимо использовать функции работы с указателем текущей позиции в потоке для потока, связанного не с файлом, а с устройством. Поэтому применение описанных выше функций с любым из стандартных потоков приводит к неопределенным результатам.
Ввод-вывод, ориентированный на поток, обычно применяется для выполнения достаточно стандартных операций ввода-вывода. Применение рассмотренных выше функций обмена с потоками гарантирует успешность переноса программы (в отношении ввода-вывода) в различные операционные системы
Функции ввода-вывода более низкого уровня позволяют пользоваться средствами ввода-вывода операционной системы непосредственно. При этом не выполняются буферизация и форматирование данных. Программы, использующие низкоуровневый ввод-вывод, переносимы в рамках некоторых систем программирования Си, в частности, относящихся к UNIX. Учитывая близость функций низкоуровневого ввода-вывода к средствам ввода-вывода операционной системы, можно рекомендовать их применение для разработки собственной подсистемы ввода-вывода, например ориентированной на работу со сложными структурами данных (списки, деревья, сложные записи и т.п.).
При низкоуровневом открытии файла с ним связывается не указатель файла (потока), а дескриптор (handle) файла. Дескриптор является целым значением, характеризующим размещение информации об открытии файла во внутренних таблицах операционной системы. Дескриптор файла используется при последующих операциях с файлом.
В библиотеку языка Си включены следующие основные функции ввода-вывода нижнего уровня:
• open( )/cose( ) - открыть / закрыть файл;
• creat( ) -создать файл;
• read( )/write( ) - читать / писать данные;
• sopen( ) - открыть файл в режиме разделения, т.е. для одновременного доступа со стороны нескольких процессов (работающих программ);
• eof( ) - проверить достижение конца файла;
• Iseek( ) - изменить текущую позицию в файле;
• tell( ) - получить значение текущей позиции в файле.
Для работы с функциями нижнего уровня в программу должны включаться соответствующие заголовочные файлы. Имена этих файлов могут быть различными в разных операционных системах. Поэтому перед написанием программ, использующих функции ввода-вывода нижнего уровня, или при переносе программ в другую операционную систему необходимо ознакомиться с документацией по библиотеке Си для данной операционной системы.
Функции нижнего уровня в отличие от функций для работы с потоком не требуют включения в программу заголовочного файла stdio.h.Однако, этот файл содержит определения ряда констант (например, признак конца файла EOF),которые могут оказаться полезными. В случае применения этих констант файл stdio.hдолжен быть включен в программу.