关于EOF标记的Fortran错误

时间:2015-03-24 17:11:36

标签: fortran eof

我提前道歉,因为我知道这个问题已被其他用户询问并解决了。但是我似乎无法自己解决这个问题:

部分代码:

integer variable_1 
open(522, position='rewind', form='unformatted')
  write(522) varibale_1    //This is line 110
  rewind(522)
  close(522)

错误: 在文件file_name的第110行(单位= 522,文件=' fort.522') Fortran运行时错误:EOF标记后不允许顺序读取或写入,可能使用REWIND或BACKSPACE

文件522以下列方式创建另一个子例程:

variable_1 = 0
      inquire(522, exist=lex, iostat=ios, recl=i)
      open(522,iostat=ios, form='unformatted')
      read(522, err=37, end=37) variable_1
      close(522)
      go to 38
 37   continue
 38   continue

我不知道该怎么办,我尝试在不同的地方放置bakcspace(522)或倒带(522),最后出现分段错误或同样的错误......

注意:第110行是写声明。

提前谢谢大家。

1 个答案:

答案 0 :(得分:1)

首先,您的问题是可重现的,它发生在(相当)当前主干和gfortran 4.8。

您在第二个代码段中执行的操作是创建一个完全空的文件。我不确定这是出于预期的目的,但是就是这样。

接下来发生的事情是文件在读取错误时关闭。下一个open语句几乎没有任何内容,允许在现有单元上执行多个open语句。之后,当您尝试对具有错误条件的文件执行I / O时,会发生欢闹。

所以将代码更改为

  logical lex
  variable_1 = 0
  inquire(552, exist=lex, iostat=ios, recl=i)
  open(552,iostat=ios, form='unformatted')
  read(552, err=37, end=37) variable_1
  go to 38
37 continue
38 continue
  close(552)


  open(522, file="fort.552", form='unformatted')
  write(522) variable_1
  rewind(522)
  close(522)
end program

一切都会好的。

我已经提交了PR 65563PR 65565两个方面的内容。