5.9 Формат файла неформатированных последовательных файлов
Неформатированные последовательные файлы хранятся в виде логических записей с использованием маркеров записей. Каждая логическая запись состоит из одной или нескольких подзаписей.
Каждая подзапись состоит из ведущего маркера записи, данных, введённых программой пользователя, и заключительного маркера записи. Маркеры записей по умолчанию являются целыми числами длиной четыре байта, и восьмью байтами, если используется опция -fmax-subrecord-length=8 (которая существует только для обратной совместимости).
Представление маркеров записей соответствует неформатированным файлам, заданным с помощью опции -fconvert, спецификатора CONVERT в операторе открытия или переменной среды GFORTRAN_CONVERT_UNIT.
Максимальное количество байтов пользовательских данных в подзаписи составляет 2147483639 (2 ГиБ - 9) для маркера записи длиной четыре байта. Этот предел можно уменьшить с помощью опции -fmax-subrecord-length, хотя это редко бывает полезно. Если длина логической записи превышает этот предел, данные распределяются по нескольким подзаписям.
Абсолютное значение числа, хранящегося в маркерах записей, равно количеству байтов пользовательских данных в соответствующей подзаписи. Если ведущий маркер записи подзаписи содержит отрицательное число, за текущей подзаписью следует другая. Если заключительный маркер записи содержит отрицательное число, то перед текущей подзаписью есть предшествующая.
В самом простом случае, когда в каждой логической записи содержится только одна подзапись, оба маркера записи содержат количество байтов пользовательских данных в записи.
Формат неформатированных последовательных данных можно дублировать с помощью неформатированного потока, как показано в примере программы для неформатированной записи, содержащей одну подзапись:
program main use iso_fortran_env, only: int32 implicit none integer(int32) :: i real, dimension(10) :: a, b call random_number(a) open (10,file='test.dat',form='unformatted',access='stream') inquire (iolength=i) a write (10) i, a, i close (10) open (10,file='test.dat',form='unformatted') read (10) b if (all (a == b)) print *,'success!' end program main
Далее: Асинхронное ввод/вывод, Предыдущее: Операции с файлами символических ссылок, Вверх: Характеристики компилятора [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gfortran/File-format-of-unformatted-sequential-files.html