gpt4 book ai didi

c - 在 NodeJS 中,如何读取 C 程序的输出?

转载 作者:行者123 更新时间:2023-11-30 16:16:11 26 4
gpt4 key购买 nike

在 NodeJS 中(使用 Electron,因此 console.log 位于窗口控制台上),我想生成一个 C 程序子进程,并读/写到其 stdio 中进行通信。

这是 JavaScript:

const { spawn } = require('child_process');
var utfEncoder = new TextEncoder("utf-8");
var utfDecoder = new TextDecoder("utf-8");

var process = spawn("./src/test-c");

process.stdout.on('data', (data) => {
console.log(utfDecoder.decode(data));
});

model.send = function(s) {
model.process.stdin.write(utfEncoder.encode(s));
}

console.log(model.process);

还有C:

int main() {
char buffer[100];
printf("ready !");
fflush(stdout);
for (int a = 0; a < 100; ++a) {
scanf("%s", buffer);
printf("I read: %s", buffer);
fflush(stdout);
}
return 0;
}

“准备好了!”永远不会出现在任何地方。但当程序每秒仅打印一条消息时,它就会起作用:

int main() {
for (int a = 0; a < 10; ++a) {
printf("ready !");
fflush(stdout);
sleep(1);
}
return 0;
}

使用此程序,消息“准备好!”每秒都会出现在窗口控制台上,但第一个没有任何反应(甚至连 scanf 之前的第一条消息也没有)。

我在这里做错了什么?

编辑:起初,我尝试使用 bash 脚本来代替第二个示例(每秒回显一条消息),但实际上它也适用于每秒写入一条消息的 C 程序,而不读取任何输入(在此处编写)。

最佳答案

当您使用 scanf("%s"...); 时,您将一直读取到行尾。所以你不会单独得到每个点。您可能只想读取一个字符。

关于c - 在 NodeJS 中,如何读取 C 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com