Fortran 77 POSIX是否符合要求? - 写二进制文件

时间:2009-04-14 10:13:58

标签: image file posix fortran77

我正在尝试从fortran编写二进制数据文件,但我发现常规文件接口非常有限,我想知道Fortran是否具有POSIX编译功能。

我找到了这个标准:IEEE 1003.9-1992,但我不知道它是否得到大多数常见编译器的完全支持(或者我必须激活任何标志)。我找不到任何实用信息,你能给我任何建议吗?

BTW我正在尝试编写图像文件,首先我要尝试使用tga/pgm。另外,我不想在外部库中添加任何依赖项,谢谢!

解决方案:

最后我能够写ppm files,在内部循环结束时我不得不avoid printing newline,最终的代码是这样的:

      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

没有人在FORTRAN中提供有关POSIX的任何信息。

感谢。

2 个答案:

答案 0 :(得分:5)

TGA是一种非常简单的格式,即使它是二进制格式,因此应该可以从FORTRAN编写它。但是,如果没有外部库的帮助,我不想在FORTRAN中尝试TIFF,PNG,GIF或JPG。

您可能会发现netpbm格式系列之一更易于编写,并且可以轻松地将它们转换为TGA或您可能需要的任何其他格式,以便使用简单命令进行显示或进一步处理。 PBM格式包括纯ASCII和二进制风格,因此即使二进制文件访问存在问题,也可以编写它们(尽管效率非常低)。该工具套件包括与大约100种其他图像文件格式的转换。

编辑:很抱歉,我对如何实际编写来自FORTRAN的文件更有帮助,但是当我上次使用该语言时,穿孔卡很常见。 ; - )

答案 1 :(得分:0)

读取和写入其他语言的随机或顺序二进制文件的问题是fortran io系统使用文件中的其他信息。我不记得它是在f77标准中,但肯定大多数pc和unix编译器都这样做。

例如,如果写入二进制顺序文件

write(bsf) doublevariable, realvariable

然后该文件将包含(如果您可以读取二进制文件)

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

每条记录都有记录标记,这些标记是在前端和末尾写入的字节长度。 这是必需的,因为每个记录可以具有不同的长度,并且当读取一个记录时不必读取为记录写入的所有内容。 例如,如果一个人正在阅读以上内容,则可以

read(bsf) doublevariable

下一次读取bsf需要在下一条记录的开头。

因此,读取或写入二进制文件以与其他语言共享应该通过用C语言编写的库或任何不支持Fortran的语言来完成,