加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash中select()系统调用的等价物

发布时间:2020-12-13 22:59:20 所属栏目:Linux 来源:网络整理
导读:在我的脚本中,我试图从几个串口读取数据以协调多个设备. 我可以使用exec 9 / dev / ttyACM0 exec 8 / dev / ttyACM1等 我正在跳跃,然后我可以对这些文件描述符执行类似select()的操作以等待数据到达,然后使用读取0 9或读取0 8取决于哪一个已接收数据来处理它
在我的脚本中,我试图从几个串口读取数据以协调多个设备.

我可以使用exec 9< / dev / ttyACM0&&& exec 8< / dev / ttyACM1等 我正在跳跃,然后我可以对这些文件描述符执行类似select()的操作以等待数据到达,然后使用读取0<& 9或读取0< 8取决于哪一个已接收数据来处理它.不幸的是我找不到Bash的select()等价物.

我能找到的最接近的是使用read -t 0 0<& 9来轮询要读取的数据.我不喜欢这个,因为它需要睡眠以防止脚本消耗100%的处理器.虽然亚秒级睡眠是可能的,例如而真实;睡觉0.01;这样做会消耗我系统上约4%的处理器.我可以将其恢复到0.1秒并将其降低至<1%,但它仍然没有“感觉”正确的方式,因为它为设备之间的任何协调增加了至少100ms的额外延迟. 这有什么解决方案吗?是否有Bash select()等效?

解决方法

引用Greg的Bash Wiki http://mywiki.wooledge.org/ProcessManagement

There is no shell scripting equivalent to the select(2) or poll(2) system calls. If you need to manage a complex suite of child processes and events,don’t try to do it in a shell script. (That said,there are a few tricks in the advanced section 07001 of this page.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读