3

如何在 GnuCOBOL 中启动子进程?

在 Node.js 中,我们可以使用spawnexec来启动子进程:

var proc = require("child_process").spawn("ls", ["-l"]);
proc.stdout.on("data", function (chunk) {
  console.log(chunk);
});

// or

var proc = require("child_process").exec("ls -l"], function (err, stdout, stderr) {
   ...
});

上面的两个示例都运行ls -l(列出文件和目录)。如何在 COBOL 中实现相同的目标?

4

1 回答 1

5

使用多年来在 GnuCOBOL(以前称为 OpenCOBOL)中支持的通用 COBOL 扩展:

CALL 'SYSTEM' USING whatever END-CALL

这也适用于“cobcrun”,如果您需要具有单独环境(EXTERNAL项目,ACCEPT x FROM y/ SET ENVIRONMENT y TO x)或运行时配置(例如通过cobcrun -c different.cfg OTHERMAIN)的 COBOL 流程,这将很有用。

您的原始样本可能看起来像(没有使用管道的选项,这将是一个不同的问题):

CALL 'SYSTEM' USING 'ls -l >dirlist'
  ON EXCEPTION
    CALL 'SYSTEM' USING 'dir >dirlist'
    END-CALL
END-CALL

之后,您可以将目录列表作为正常的行顺序文件读取。

西蒙

顺便说一句:鉴于您的样本,您可能会寻找CALL 'C$LISTDIR'.

于 2016-05-06T05:45:59.703 回答