gpt4 book ai didi

Linux:检查文件描述符是否可用于读取

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:09 27 4
gpt4 key购买 nike

考虑以下示例,模拟一个在 10 秒后给出输出的命令:exec 5< <(sleep 10; pwd)

在 Solaris 中,如果我在 10 秒之前检查文件描述符,我可以看到它的大小为 0,这告诉我它还没有填充数据。我可以简单地每秒检查一次,直到满足文件测试条件(不同于 0),然后拉取数据:

while true; do
if [[ -s /proc/$$/fd/5 ]]; then
variable=$(cat <&5)
break
fi
sleep 1
done

但在 Linux 中我不能这样做(RedHat、Debian 等)。所有文件描述符都以 64 字节的大小出现,无论它们是否包含数据。对于需要不同时间来转储其输出的各种命令,我不知道何时应该读取文件描述符。不,我不想只是等待 cat <&5最后,我需要知道什么时候应该执行 cat首先。因为我正在使用这种机制来同时发出命令并将它们的输出分配给相应的文件描述符。如前所述,这在 Solaris 中效果很好。

最佳答案

这是一个想法的骨架:

#!/bin/bash
exec 5< <(sleep 4; pwd)
while true
do
if
read -t 0 -u 5 dummy
then
echo Data available
cat <&5
break
else
echo No data
fi
sleep 1
done

来自 Bash 引用手册:

If timeout is 0, read returns immediately, without trying to read and data. The exit status is 0 if input is available on the specified file descriptor, non-zero otherwise.

想法是使用 read with -t 0(超时为零)和 -u 5(从文件描述符 5 读取)来立即检查数据可用性.

当然这只是一个演示概念的玩具循环。

关于Linux:检查文件描述符是否可用于读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035816/

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