使用 gfortran 中的 open 语句更改临时文件的状态
Changing the status of a temporary file with the open statement in gfortran
我正在使用一个旧的 Fortran 代码,并且我在一个旧的 OS 中使用 g77-3.3 运行将它连接起来。由于这个版本的编译器不再附带大多数 Linux 发行版,我尝试使用 gfortran (4.9.2),我遇到了这个小问题。
此代码使用临时文件。它写入此文件,然后在某个时刻将文件的状态更改为 scratch,如下例所示:
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 中的错误吗?
如果您在 打开文件之前写入单元 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 statement (9.5.6)") 处理了这种情况,并且有一个看起来就像您的代码的示例。它指出这个 "example is invalid because it attempts to change the value of the STATUS=
specifier."
如果想在关闭时删除文件,也可以
PROGRAM testopenfile
IMPLICIT NONE
WRITE(8,*)'fdsasfd'
CLOSE(8,status='DELETE')
END PROGRAM
我正在使用一个旧的 Fortran 代码,并且我在一个旧的 OS 中使用 g77-3.3 运行将它连接起来。由于这个版本的编译器不再附带大多数 Linux 发行版,我尝试使用 gfortran (4.9.2),我遇到了这个小问题。
此代码使用临时文件。它写入此文件,然后在某个时刻将文件的状态更改为 scratch,如下例所示:
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 中的错误吗?
如果您在 打开文件之前写入单元 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 statement (9.5.6)") 处理了这种情况,并且有一个看起来就像您的代码的示例。它指出这个 "example is invalid because it attempts to change the value of the STATUS=
specifier."
如果想在关闭时删除文件,也可以
PROGRAM testopenfile
IMPLICIT NONE
WRITE(8,*)'fdsasfd'
CLOSE(8,status='DELETE')
END PROGRAM