Spec-Zone.ru › GNU Fortran 9

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API