在COBOL中启动子进程

Ion*_*zău 3 cobol child-process gnucobol

如何在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) {
   ...
});
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*sch 5

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

CALL 'SYSTEM' USING whatever END-CALL
Run Code Online (Sandbox Code Playgroud)

这也适用于'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
Run Code Online (Sandbox Code Playgroud)

之后,您可以将dirlist读作普通的行顺序文件.

西蒙

顺便说一下:鉴于您的样品,您可以寻找CALL 'C$LISTDIR'.