Системное программирование в UNIX средствами Free Pascal

       

Структура TFILE


Процедуры буферизованного ввода/вывода

идентифицируют открытые файлы (каналы, сокеты, устройства и другие объекты) при помощи указателя на структуру типа FILE. Процедуры этого семейства также называют процедурами стандартного ввода/вывода, так как они содержатся в стандартной библиотеке языка С. Указатель на объект FILE часто называется также потоком ввода/вывода и является аналогом файловых дескрипторов базового ввода/вывода.

Определение структуры TFILE находится в заголовочном файле stdio. Следует отметить, что программисту нет необходимости знать устройство структуры TFILE, более того, ее определение различно в разных системах.

Все данные, считываемые из файла или записываемые в файл, передаются через буфер структуры TFILE. Например, стандартная процедура вывода сначала будет лишь заполнять символ за символом буфер. Только после заполнения буфета очередной вызов библиотечной процедуры вывода автоматически запишет его содержимое в файл вызовом fdwrite. Эти действия невидимы для пользовательской программы. Размер буфера составляет BUFSIZ байтов. Постоянная BUFSIZ определена в файле stdio и, как уже описывалось во второй главе, обычно задает размер блоков на диске. Как правило, ее значение равно 512 или 1024 байта.

Аналогично процедура ввода извлекает данные из буфера, связанного со структурой TFILE. Как только буфер опустеет, для его заполнения автоматически считывается еще один фрагмент файла. Эти действия также не видимы для пользовательской программы.

Механизм буферизации стандартной библиотеки ввода/вывода гарантирует, что данные всегда считываются и записываются блоками стандартного размера. В результате число обращений к файлам и число внутренних системных вызовов поддерживаются на оптимальном уровне. Но поскольку вся буферизация скрыта внутри процедур ввода/вывода, программист может их использовать для чтения или записи произвольных порций данных, даже по одному байту. Поэтому программа может быть составлена исходя из требований простоты и наглядности, а проблему общей эффективности ввода/вывода решат стандартные библиотеки. Далее увидим, что стандартные библиотечные процедуры также обеспечиваю простые в использовании средства форматирования. Поэтому для большинства приложений стандартный ввод/вывод является предпочтительным методом доступа к файлам.



Содержание раздела