Spec-Zone.ru › GNU Fortran 8

5.4 Согласованность и долговечность данных

В данном разделе кратко рассматриваются вопросы согласованности и долговечности данных и метаданных при выполнении операций ввода-вывода.

Что касается долговечности, GNU Fortran не предпринимает никаких усилий для обеспечения сохранения данных в устойчивом хранилище. Если это необходимо, программист GNU Fortran может использовать встроенную функцию FNUM для получения дескриптора файла низкого уровня, соответствующего открытому Fortran-блоку. Затем, используя, например, функцию ISO_C_BINDING, можно вызвать системный вызов для записи измененных данных в устойчивое хранилище, такой как fsync на POSIX, _commit на MingW или fcntl(fd, F_FULLSYNC, 0) на Mac OS X. Следующий пример демонстрирует, как вызвать fsync:

! Declare the interface for POSIX fsync function
interface
  function fsync (fd) bind(c,name="fsync")
  use iso_c_binding, only: c_int
    integer(c_int), value :: fd
    integer(c_int) :: fsync
  end function fsync
end interface

! Variable declaration
integer :: ret

! Opening unit 10
open (10,file="foo")

! ...
! Perform I/O on unit 10
! ...

! Flush and sync
flush(10)
ret = fsync(fnum(10))

! Handle possible error
if (ret /= 0) stop "Error calling FSYNC"

Что касается согласованности, для обычных файлов GNU Fortran использует буферизованный ввод-вывод для повышения производительности. Этот буфер автоматически очищается при заполнении и в некоторых других ситуациях, например, при закрытии блока. Его также можно явно очистить с помощью оператора FLUSH. Кроме того, буферизацию можно отключить с помощью переменных среды GFORTRAN_UNBUFFERED_ALL и GFORTRAN_UNBUFFERED_PRECONNECTED. Специальные файлы, такие как терминалы и каналы, всегда небуферизованы. Однако иногда могут потребоваться дополнительные действия, чтобы позволить другим процессам видеть данные, записанные GNU Fortran, как показано ниже.

Платформа Windows поддерживает модель согласованности метаданных с ослабленными ограничениями, где метаданные файла записываются в каталог по мере необходимости. Это означает, что, например, команда dir может показывать устаревшее значение размера файла. Для принудительного обновления метаданных каталога можно закрыть блок или вызвать _commit для дескриптора файла. Однако обратите внимание, что _commit принудительно запишет все измененные данные в устойчивое хранилище, что часто является очень медленной операцией.

Сеть файл-системы (NFS) реализует модель согласованности с ослабленными ограничениями, называемую согласованностью «открытие-закрытие». Закрытие файла принуждает запись измененных данных и метаданных на сервер, а открытие файла заставляет клиента связаться с сервером для перепроверки кэшированных данных. fsync также принудительно записывает измененные данные и метаданные на сервер. Аналогично open и close, получение и освобождение fcntl блокировок файлов (если сервер их поддерживает) также заставит клиент перепроверить кэш и записать измененные данные и метаданные.

Далее: Файлы, открытые без явного указания ACTION= , Предыдущее: Безопасность потоков в библиотеке времени выполнения, Вверх: Характеристики компилятора [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gfortran/Data-consistency-and-durability.html

Spec-Zone.ru

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