首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux:检查文件描述符是否可用于读取

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

Stack Overflow用户
提问于 2017-02-04 02:25:29
回答 1查看 1.9K关注 0票数 1

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

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

代码语言:javascript
复制
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中非常有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-04 02:36:10

以下是一个想法的骨架:

代码语言:javascript
复制
#!/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参考手册:

如果超时为0,则read立即返回,而不尝试读取和数据。如果指定文件描述符上的输入可用,则退出状态为0,否则为非零。

其思想是使用read with -t 0 (具有零超时)和-u 5 (从文件描述符5读取)立即检查数据可用性。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42035816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档