gpt4 book ai didi

c - 如何捕获循环代码输出

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:01 25 4
gpt4 key购买 nike

这是我的循环代码

#exe2.rb
loop do
print "#{::Time.now}\r"
sleep 1
end

我使用以下 c 来捕获它:

fp = popen("ruby /home/roroco/Dropbox/rbs/ro_cmds/exe2.rb", "r");
while (fgets(var, sizeof(var), fp) != NULL) {
printf("%s", var);
}

但是它卡在fgets中,如何让它工作?

最佳答案

这是缓冲的效果。在 UNIX 中,stdout 默认是行缓冲的,这意味着 stdio 工具会累积字节直到一些缓冲区填满或遇到 '\n'。这有利于限制I/O从而提高性能(I/O很慢)。

因此,更改您的 ruby​​ 代码以在末尾打印新行 '\n' 而不是回车符 '\r'(因为 fgets(3) 是线)。您不需要更改 C 代码,因为 fgets(3) 不会占用换行符。

Ruby 解释器同样对待 stdout,除非它是一个管道。如果是这样的话,它就被完全缓冲了。解决这个问题的最简单方法是在每次写入 ruby​​ 脚本后执行 STDOUT.flush

关于c - 如何捕获循环代码输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35694524/

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