在单元 5 或 6 上打开文件

Opening a file on unit 5 or 6

我在 Fortran 代码片段中进行了一个 read/write 操作,如下所示

OPEN(5,FILE='WKDAT.dat', STATUS='OLD')
OPEN(6,FILE='WKLST.dat', STATUS='UNKNOWN') 

我知道默认情况下,单元号 5 用于键盘输入,单元号 6 用于在屏幕上显示。我也可以使用 *.

但是在上面提到的Fortran代码中单元号是5,并且给出了一个文件名"WKDAT.dat"。所以这意味着正在从 "WKDAT.dat" 文件中读取数据。还有代码单元号 6 和文件名 "WKLST.dat"。所以这意味着数据正在写入 "WKLST.dat" 文件。 我的理解正确吗?

根据我的基本知识: 单元号 5 仅用于从键盘获取输入,单元号 6 仅用于打印到控制台,因此不应涉及任何文件。但在代码片段中,它同时具有单元号 5、6 和文件名。

所以两者是矛盾的:(

在这个 link http://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html 他们提到了以下 "When I/O is to a file you must ASSOCIATE a UNIT number (which you choose) with the FILENAME. Use any unit number other than 5 and 6. On some computers, some unit numbers are reserved for use by the computer operating system."

Fortran 没有魔法单元号。 Fortran 标准没有提及 5、6 或任何其他用于特殊目的的有效单位编号。因此,您可以自由使用 open 语句将任何有效的单元号与文件相关联。然而,正如您所说,传统上由于我之前的原因,5 和 6 已与键盘和屏幕预先关联。现在您仍然可以使用 open 语句更改关联,这很好,除了它可能导致的混乱,所以我认识的大多数人建议避免这种情况并使用 10 及以上的单元号。此外,因为 5 和 6 不能保证与默认输入和输出设备相关联,我建议不要使用它们,更喜欢 * 或者,在更现代的代码中,命名常量 input_unitoutput_uniterror_unit 来自 iso_fortran_env 内部模块。

总之,您的想法是正确的,您感到困惑我并不感到惊讶。

标准中没有说单位 56 有任何特殊含义,尽管在实践中标准输入和标准输出通常 预先连接 到5 和 6.

来自 Fortran 2008 的模块 iso_fortran_env 包含常量

INPUT_UNIT
OUTPUT_UNIT
ERROR_UNIT

标准输入、标准输出、标准错误连接的单元号。这些可以不同于 5 和 6。

打开正在使用的单元中的文件会导致该单元与新文件相关联。

例如 Cray Fortran manual 表示:

Unit numbers 100, 101, and 102 are permanently associated with the standard input, standard output, and standard error files, respectively.

这意味着如果你打开一些其他文件作为单元 56 标准输入和标准输出仍然有一些其他单元,它们是预先连接的,它们不会被关闭。