Fortran标准中的单位编号是如何形成的?

5

在Fortran中,stderr是单元0。stdin是单元5,stdout是单元6。根据Google的搜索结果,这似乎是Cray做出的决定,但不清楚他们为什么选择了这样的编号。为什么不使用1和2?旧版Fortran编译器中的1-4有什么用途,会将stdin和out转移到5和6吗?


2
当然,将单元号与预连接文件关联起来并不是Fortran语言标准所要求的,而是一种几乎普遍遵循的惯例。这是一种事实上的约定,而非法定的约定。 - High Performance Mark
3
IBM Fortran中使用5和6的方式早于Cray和stdin stdout的概念。 - tim18
1个回答

2
根据Clive G. Page所著的《Fortran77专业程序员指南》(this page),单位5和6分别被分配给stdin和stdout,以保持向后兼容性,卡片阅读器通常连接到“unit 5”,而行式打印机则连接到“unit 6”。引用如下:
“为了保持与Fortran66的兼容性,许多系统提供其他预连接文件。过去惯例是将unit 5连接到卡片阅读器,将unit 6连接到行式打印机。其他单元通常连接到具有适当名称的磁盘文件:因此,unit 39可能连接到名为FTN039.DAT或甚至TAPE39的文件。”
这并没有说明为什么选择数字5和6,但提供了一些历史背景。仍然不清楚历史机器上单元号1-4连接了什么设备。以下旧书/手册可能会有所启示:
根据《Fortran编程简介》(作者:D.D. Fisher等),第90页的说法,并非所有FORTRAN编译器都使用5号和6号设备作为卡片阅读器输入和行式打印机输出:
Waterloo FORTRAN IV和IBM System/360 FORTRAN IV确实使用5号和6号设备,但在IBM 1130上,用于卡片阅读器输入和行式打印机输出的是2号和1号设备。
最后根据FORTRAN-10/20和VAX FORTRAN兼容手册第3-6页,对于FORTRAN-10/20,“单元1是磁盘,单元2是卡片阅读器,单元3是打印机,单元5是终端”。在VAX FORTRAN中,单元5适用于终端的输入和输出。
也许这个最后的部分表明,由于某些机器开始具有终端来进行I / O,除了卡片输入和行式打印输出之外,首选/默认设备可能已成为终端的输入和输出,高级终端相关的单元已成为I / O默认值。

1
我认为这更像是FORTRAN IV和IBM编译器(G、H及早期版本),而不是66标准。许多实际细节在标准中留给了实现自由裁量的空间。事实上,在ANSI X3.9 FORTRAN 66标准中,我找不到任何相关信息。 - Vladimir F Героям слава
根据我找到的一些旧手册,FORTRAN IV确实是这种语言,其中根据编译器/系统使用不同的单位来使用“stdio”。已做出相应编辑。 - v-joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接