使用gfortran中的open语句更改临时文件的状态

时间:2015-03-02 13:00:11

标签: fortran status gfortran

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

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

      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中的错误吗?

2 个答案:

答案 0 :(得分:3)

如果您在打开文件之前写信到单位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=说明符的值。”

答案 1 :(得分:1)

如果要在结束时删除文件,也可以

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