gpt4 book ai didi

awk - 如何检查 GNU awk 协进程是否打开,或者在不写入的情况下强制打开它?

转载 作者:行者123 更新时间:2023-12-04 21:30:13 25 4
gpt4 key购买 nike

我有一个使用协进程的 gawk 程序。但是,有时我没有任何数据要写入协程,并且我的原始脚本在等待协程输出时挂起。

下面的代码从 STDIN 读取,将每一行写入一个“cat”程序,作为协进程运行。然后它读回协处理输出并将其写入 STDOUT。如果我们将 if 条件更改为 1==0,则不会向协进程写入任何内容,并且程序会在 while 循环中挂起。

来自manual ,似乎协同进程和双向通信 channel 仅在第一次与 |& 运算符进行 IO 操作时启动。也许我们可以在不实际写任何东西的情况下开始做事(例如写一个空字符串)?或者有没有办法检查协同进程是否已经开始?

#!/usr/bin/awk -f
BEGIN {
cmd = "cat"
## print "" |& cmd
}

{
if (1 == 1) {
print |& cmd
}
}

END {
close (cmd, "to")
while ((cmd |& getline line)>0) {
print line
}
close(cmd)
}

最佳答案

好问题,+1!

只需测试 close(cmd, "to") 的返回码 - 如果管道打开,它将为零,否则为 -1(或其他值)。例如:

if (close(cmd, "to") == 0) {
while ((cmd |& getline line)>0) {
print line
}
close(cmd)
}

关于awk - 如何检查 GNU awk 协进程是否打开,或者在不写入的情况下强制打开它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066356/

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