Соответствует ли Fortran 77 POSIX? - Запись бинарных файлов

Я пытаюсь писать двоичные файлы данных из фортрана, но я нахожу обычные файловые интерфейсы очень ограничивающими, интересно, есть ли в фортране функции компиляции POSIX.

Я нашел этот стандарт: IEEE 1003.9-1992, но я не знаю это, если полностью поддерживается большинством распространенных компиляторов (или если мне нужно активировать какие-либо флаги). Я не могу найти никакой практической информации, можете ли вы дать мне какое-либо предложение?

Кстати, я пытаюсь писать файлы изображений, сначала я хочу попробовать тга/пгм. Также я не хочу добавлять какие-либо зависимости к внешним библиотекам, спасибо!

Решение:

Наконец я смог написать файлы ppm, и мне пришлось не печатать новую строку в конце внутреннего цикла, окончательный код выглядит так:

      subroutine imgwrite()
      implicit none
*     ******************************************************************
      include 'image.f'
*     ******************************************************************
      integer x, y, i

      write(imgunit, '(A)') 'P3'
      write(imgunit, '(I4)') imgwidth
      write(imgunit, '(I4)') imgheight
      write(imgunit, *) 255

      do 10 y=1, imgheight
        do 20 x=1,imgwidth
          write(imgunit,100) (int(imgpixels(x,y,i)*255D0), i=1,3)
20      continue
        write(imgunit,110)
10    continue


100   FORMAT(3(I4),$)
110   FORMAT((/))

      return
      end

Никто не предоставил никакой информации о POSIX в FORTRAN.

Спасибо.


person Siu    schedule 14.04.2009    source источник


Ответы (2)


TGA — очень простой формат, несмотря на то, что он двоичный, поэтому его можно записать с FORTRAN. Однако я бы не стал пробовать TIFF, PNG, GIF или JPG на FORTRAN без помощи внешних библиотек.

Вы можете обнаружить, что один из форматов семейства netpbm написать проще, и их будет легко преобразовать в TGA или любой другой формат, который вам может понадобиться для отображения или дальнейшей обработки с помощью простых команд. Форматы PBM включают в себя как чистый ASCII, так и двоичные разновидности, поэтому их можно записывать (хотя и очень неэффективно), даже если доступ к двоичным файлам проблематичен. Набор инструментов включает преобразование примерно в 100 других форматов файлов изображений и обратно.

Редактировать: Извините, что не могу быть более полезным в отношении того, как на самом деле писать файлы с FORTRAN, но перфокарты были обычным явлением, когда я в последний раз использовал этот язык. ;-)

person RBerteig    schedule 14.04.2009

Проблема с чтением и записью двоичных файлов, случайных или последовательных, для использования другими языками заключается в том, что система fortranio использует другую информацию в файле. Я не могу вспомнить, чтобы это было в стандарте f77, но, безусловно, большинство компиляторов для ПК и Unix сделали это.

Например, при записи в двоичный последовательный файл

write(bsf) doublevariable, realvariable

тогда файл будет содержать (если бы вы могли читать двоичный файл)

12<value of double><value of real>12

Каждая запись имеет маркеры записи, которые представляют собой длину в байтах того, что было записано в начале и в конце. Это нужно потому, что каждая запись может иметь разную длину и при чтении не обязательно читать все, что было записано для записи. Например, если бы кто-то читал вышеизложенное, он мог бы

read(bsf) doublevariable

Следующее чтение bsf должно быть в начале следующей записи.

Таким образом, чтение или запись двоичных файлов для совместного использования с другими языками должны выполняться через библиотеку, написанную на C или любом другом языке, который не делает того, что делает Fortran.

person hugok    schedule 31.07.2009