首页 > 解决方案 > IBM COBOL on AIX 文件访问

问题描述

我们正在将一堆 COBOL 程序从 z/OS 迁移到 AIX 7。我们在 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。

标签: fileaixcobol

解决方案


我可以看到这会令人困惑......尤其是来自非 POSIX 环境。

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

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

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

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

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

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

  • 非本机(在另一个产品之上)DB2 (DB2) 和 SFS (TxSeries/CICS)。这些文件系统对标准操作系统实用程序不可见

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

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

在 Native 文件系统中,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 相比,它已经过时且陈旧。


推荐阅读