读取和设置 MVS 数据集和 PDS 成员的文件修改时间戳的最有效方法是什么?

What is the most efficient way to read and set file modification timestamps for MVS data sets and PDS members?

我正在尝试访问 MVS 中的数据集和成员元数据,但找不到获取和设置修改时间的机制(好的,还有 RACF 规则,但现在这并不重要)。我们的(许多)目标之一是在部署文件时协调 USS 中的时间戳与 MVS 中的类似值。

明显的机制是使用来自 TSO 的 LISTCAT,但这只显示了创建 year.day(所以今天是 19.294)。当我必须扫描数千个文件以查找最近的修改时,它的速度非常慢。我在 C 环境中工作,它具有嵌入 360 汇编程序指令的能力。 z/OS C/C++ 库标准调用,如 fstat/stat 不支持 MVS 文件或 PDS 成员。

PDS 实用程序文档中有提示,ISPF 有时会在 PDS 目录的用户区域设置修改时间,并且有提示使用 DSCB 格式 1,但我们无法验证这一点,并且该字段该格式的定义不描述修改时间戳。

由于 PDS 成员是单个数据集的一部分,您得到混合指示的原因是数据集本身没有明确记录这样的时间戳。

默认情况下,PDS 没有针对每个成员的此类字段。 ISPF 实用程序利用用户数据字段,它是目录的一部分(目录条目具有每个成员的信息),当且仅当使用 ISPF 或 ISPF 编辑时,为 edited/editable 的 PDS 成员记录此信息API(根据 LMMSTATS)。

  • 请注意,ISPF 统计数据并非神圣不可侵犯并占用目录 space,它们可以被删除,例如,使用 ISPF 选项 3.5(修复 D 或 E37 异常终止的常见尝试)。

如果 SMF 类型 42 记录是 captured/recorded 那么这可能更具指示性,但仍然不是全部,因为它仅在发出 STOW(更新目录)(显式或隐式)时记录此类信息。大多数更新、创建或删除成员的程序都应该发出 STOW。但是有些实用程序可能不会。

您可能对子类型感兴趣:-

20、21、24 和 25(22 和 23 与 DFSMS 相关)。