【问题标题】:Changing the status of a temporary file with the open statement in gfortran使用 gfortran 中的 open 语句更改临时文件的状态
【发布时间】:2015-03-02 13:00:10
【问题描述】:

我正在使用旧的 Fortran 代码,并且在旧操作系统中使用 g77-3.3 运行它。由于这个版本的编译器不再随大多数 Linux 发行版一起提供,我尝试使用 gfortran (4.9.2),我正面临这个小问题。

此代码使用临时文件。它写入此文件,然后在某个时刻将文件的状态更改为暂存,如下例所示:

      PROGRAM testopenfile
      IMPLICIT NONE
      WRITE(8,*)'fdsasfd'
      OPEN(8,STATUS='SCRATCH')
      CLOSE(8)
      END PROGRAM

这段代码适用于 g77 编译器,但是当我使用 gfortran 运行它时,我收到以下消息:

  At line 4 of file testopenfile.f (unit = 8, file = 'fort.8')
  Fortran runtime error: Cannot change STATUS paramter in OPEN statement.

这种设置临时文件的方式在 gfortran 中是否发生了变化?难道我做错了什么?这可能是这个版本的 gfortran 的错误吗?

【问题讨论】:

  • 我已经更改了代码的缩进,因为我猜你的意思是它是固定格式的(g77,它在原始代码的第 7 列中)。如果这不是您想要的,请随时改回来。

标签: fortran status gfortran


【解决方案1】:

如果您在在打开文件之前写入单元8,实际上您正在写入一个名为fort.8 的文件,请参阅here。显然,当您尝试将暂存文件附加到该文件时,该文件仍然在8 单元打开。

您可以通过在写入单元之前打开暂存文件来解决此问题:

      PROGRAM testopenfile
      IMPLICIT NONE
      OPEN(8,STATUS='SCRATCH')
      WRITE(8,*)'fdsasfd'
      CLOSE(8)
      END PROGRAM

或使用不同的单位。

Fortran 2008 Standard 中的第 C.6.3 章(“OPEN 语句 (9.5.6)”)处理了这种情况,并提供了一个与您的代码相似的示例。它声明此“示例无效,因为它试图更改STATUS= 说明符的值。”

【讨论】:

  • 问题是代码在到达此 OPEN 语句之前很久就写入此文件。在您提供的第一个链接中,在 2.1.2.2 中。已经打开,它说:例如,空白和表格。它是否适用于 STATUS 选项?你知道g77是否做错了没有显示这个错误吗?
  • 是的,但您不能更改 STATUS 说明符,请参阅第二个链接,第 C.6.3 章。
  • 我不确定g77 在做什么,但它不符合标准。顺便说一句:ifort 警告同样的问题。
【解决方案2】:

如果你想在关闭时删除文件,你也可以这样做

      PROGRAM testopenfile
      IMPLICIT NONE
      WRITE(8,*)'fdsasfd'
      CLOSE(8,status='DELETE')
      END PROGRAM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多