我继承了Fortran77程序的源代码和已编译的可执行文件。我不知道使用什么编译器来生成现有的可执行文件,但我使用的是GCC 4.9.2。除其他外,程序从/向二进制文件读取和写入记录。记录数也存储在文件的开头。
我的问题是我自己编译的可执行文件错误地读取了文件中的记录数,因此在尝试读取最后一条记录时会抛出错误。二进制数据文件是使用现有的可执行文件(我继承的那个)生成的,令人惊讶的是,当我使用现有的可执行文件从数据文件中读取时,它按预期工作。
我的问题是,Fortran READ / WRITE语句是否具有不同的语义(例如文件布局),具体取决于平台,fortran版本或编译器类型/版本?
对于它的价值,读写代码是
WRITE(INLIB,REC=1)NPROD,(ELMNTS(K),K=1,ITE),(ATOMWT(KK),KK=1,
+ ITE),IOUT,INFILE,ITERM,IBM,LINEPR
READ(INLIB,REC=1)NPROD,(ELMNTS(K),K=1,ITE),(ATOMWT(KK),KK=1,ITE)
+ ,IOUT,INFILE,ITERM,IBM,LINEPR
NPROD
是文件中的记录数。当我在READ
语句之后设置一个断点时,我可以看到NPROD
大约是300,000,当我知道只有大约2,000条记录时。
这是打开文件的代码:
OPEN(UNIT=INLIB,FILE='PRODUCT.BIN',ACCESS='DIRECT',RECL=1188,
+ STATUS='OLD')
关于endianess,我认为我当前的平台与二进制数据文件兼容,因为如果我在十六进制编辑器中打开它,我可以看到一些在程序上下文中有意义的清晰的ASCII文本。