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-11.1.0/gfortran/File-format-of-unformatted-sequential-files.html