Съвместим ли е с Fortran 77 POSIX? - Писане на двоични файлове

Опитвам се да пиша двоични файлове с данни от fortran, но намирам обикновените файлови интерфейси за много ограничаващи, чудя се дали Fortran има функции за компилиране на POSIX.

Намерих този стандарт: IEEE 1003.9-1992, но не знам ако се поддържа напълно от повечето често срещани компилатори (или ако трябва да активирам някакви флагове). Не мога да намеря никаква практическа информация, можете ли да ми дадете някакво предложение?

BTW Опитвам се да пиша файлове с изображения, първо искам да опитам с tga/pgm. Също така не искам да добавям никаква зависимост към външни библиотеки, благодаря!

Решение:

Най-накрая успях да напиша 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

Проблемът с четенето и записването на двоични файлове, произволни или последователни, за други езици, е че системата fortran io използва друга информация във файла. Не мога да си спомня, че беше в стандарта 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