我们正在将一堆COBOL程序从z / OS迁移到AIX7。我们正在AIX上使用IBM COBOL Compiler(5.1)。现在,我不了解AIX上COBOL的文件访问和文件系统如何工作。COBOL代码直接使用
SELECT :FILE: ASSIGN TO :FILE:
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
STATUS IS S-STATUS.
然后执行OPEN INPUT
此在AIX上编译良好:
PP 5724-Z87 IBM COBOL for AIX 5.1.0 in progress ...
LineID Message code Message text
91 IGYGR1216-I A "RECORDING MODE" of "F" was assumed for file
"CUSTOMERS".
94 IGYGR1216-I A "RECORDING MODE" of "F" was assumed for file
"LIST1".
97 IGYGR1216-I A "RECORDING MODE" of "F" was assumed for file "UINPUT".
Messages Total Informational Warning Error Severe Terminating
Printed: 3 3
End of compilation 1, program xxxxx, highest severity: Informational.
现在的问题是,在运行程序时找不到该文件。它给出了状态码:37
我知道我必须为shell(ksh)上的文件提供一个文件系统,例如:export CUSTOMERS="STL-CUSTOMERS"
。该文件与程序位于同一目录中。
我的问题是:使用哪个文件系统?我尝试了“ STL”,它对我来说就像是“标准” AIX文件系统(即JFS2)。但这是行不通的。另一个选项是(来自AIX编程指南5.1上的COBOL):
我们尝试了所有,起作用的文件系统是“ QSAM”。该文件是从大型机传输来的文本文件(ASCII)。但不是直接复制,而是先由FTP复制,然后在Windows上转换为ASCII(我们必须修复换行符)。为了使其正常工作,我们使用vi编辑了文件,使每行80个字符。因此它在AIX上进行了编辑,看起来像AIX上的普通文本文件。为什么COBOL仍希望QSAM作为“文件系统”? “文件系统”一词在这里意味着什么?似乎这不是真正的文件系统(例如JFS)的意义。
我知道这在哪里会令人困惑……尤其是来自非POSIX环境。
我将从答案开始,然后提供更多信息。
对于普通的文本文件,您需要RSD,并确保\ n为第81列。记录长度80是数据部分,不包括定界符。QSAM(固定长度)似乎可以工作,但会将\ n作为数据的一部分返回!通过文件系统,我们指的是数据如何物理存储在磁盘,SSD,RAM等上。
文件系统有两种基本类型:
然后,按COBOL组织类型进行分组(
首选
QSAM
是z / OS的忠实实现:RSD
LSQ
(行顺序)与z / OS上相同-混乱的语义。VSAM
是文件系统的别名,该文件系统提供z / OS VSAM的所有功能。不幸的是,由于历史原因,它指向SdU ...STL
在所有方面都比SdU更好。SdU是第一个涵盖QSAM和VSAM的文件系统,但与STL相比,它已经老旧且不实用。