AIX 文件访问上的 IBM COBOL

IBM COBOL on AIX file access

我们正在将一堆 COBOL 程序从 z/OS 迁移到 AIX 7。我们在 AIX 上使用 IBM COBOL 编译器 (5.1)。现在我不明白 COBOL 在 AIX 上的文件访问和文件系统是如何工作的。 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",在我看来它类似于 "standard" AIX 文件系统(即 JFS2)。但这是行不通的。另一个选项是(来自 AIX Programming Guide 5.1 上的 COBOL):

我们尝试了所有,可用的文件系统是 "QSAM"。该文件是从大型机传输的文本文件 (ASCII)。但不是直接的,它首先被 FTP 复制,然后在 Windows 上转换为 ASCII(我们必须修复换行符)。在尝试让它工作时,我们用 vi 编辑了文件,使每行 80 个字符。所以它是在 AIX 上编辑的,在 AIX 上看起来就像一个普通的文本文件。 为什么 COBOL 仍然需要 QSAM 作为 "file system"? "file system" 在这里是什么意思?好像不是JFS等真正意义上的文件系统。

我知道这会让人感到困惑...尤其是来自非 POSIX 环境。

我将从答案开始,然后提供更多信息。

对于普通文本文件,您需要 RSD,并确保 \n 是第 81 列。 80 的记录长度 只是 数据部分,不包括分隔符。 QSAM(固定长度)似乎可以工作,但 return \n 会作为数据的一部分!

你的 FS=37 意味着文件的属性与程序要求的不匹配(比 FS=39 更深奥 - 无效的固定属性)。在这种情况下,这意味着您要打开的文件实际上不是 STL 文件。

我们所说的文件系统是指数据如何物理存储在盘片、SSD、RAM 上……更准确地说,是我们如何在将记录交给下一个较低级别 I/O 之前格式化记录。

文件系统有两种基本类型:

  • 本机(在 JFS2、JFS、NFS、CIFS 等之上)RSD、QSAM、LSQ、STL、SdU。这些文件系统可以通过标准 OS 实用程序

  • 操作
  • Non-Native(在另一个产品之上)DB2 (DB2) 和 SFS (TxSeries/CICS)。这些文件系统对标准 OS 实用程序

  • 是不可见的

然后,按 COBOL 组织类型进行分组(首选):

  • 顺序:所有文件系统都支持顺序...z/OS:QSAM、VSAM
  • 相对:STL、SdU、SFS、DB2......z/OS : VSAM
  • 索引:STL、SdU、SFS、DB2......z/OS : VSAM

在本机文件系统中,QSAM(变量)、STL 和 SDU 包含元数据,使它们在 vi、cat 中无法真正查看...好吧...您可以在 vi 中打开它们,但它看起来像完全是垃圾。

QSAM 是 z/OS:

的忠实实现
  • 固定长度记录:原始数据,无 BDW/RDW,无行分隔符 (\n)。
  • 变长记录:RDW + 原始数据(没有\n)...但是没有BDW。

RSD是一个普通的流(文本)文件;每条记录都以 \n 结尾, 计入记录长度(程序永远不会看到它们)。

LSQ(行顺序)与 z/OS 相同 - 语义混乱。

VSAM 是提供 z/OS VSAM 所有功能的文件系统的别名。 不幸的是,由于历史原因,它指向 SdU...

STL 到目前为止,在所有方面都比 SdU 更好。

SdU 是第一个涵盖 QSAM 和 VSAM 的文件系统,但与 STL 相比,它又旧又破。