关于 EOF 标记的 Fortran 错误

Fortran error about EOF marker

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

部分代码:

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) 或 rewind(522),但我最终遇到了分段错误或同样的错误...

注:第110行是write语句

先谢谢大家了。

首先,您的问题是可重现的,它发生在(相当)当前的主干和 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 65563 and PR 65565 关于这两个方面的问题。