gpt4 book ai didi

linux - 相当于 Bash 中的 select() 系统调用

转载 作者:IT王子 更新时间:2023-10-29 01:25:58 27 4
gpt4 key购买 nike

在我的脚本中,我试图从多个串行端口读取数据以协调多个设备。

我可以使用 exec 9</dev/ttyACM0 && exec 8</dev/ttyACM1 打开串行端口的文件描述符等等

我希望我可以做类似 select() 的事情在这些文件描述符上等待数据到达,然后用 read 0<&9 处理它或 read 0<&8取决于哪一个收到了数据。不幸的是,我找不到 select() 的等价物用于 Bash。

我能找到的最接近的是使用 read -t 0 0<&9轮询要读取的数据。我不喜欢这个,因为它需要 sleep以防止脚本消耗 100% 的处理器。尽管亚秒级 sleep 是可能的,例如while true; do sleep 0.01; done这消耗了我系统上大约 4% 的处理器。我可以将它降低到 0.1 秒并减少到 <1%,但它仍然“感觉”不到正确的方法,因为它为设备之间的任何协调增加了至少 100 毫秒的额外延迟。

有什么解决办法吗?是否有 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 http://mywiki.wooledge.org/ProcessManagement#advanced of this page.)

关于linux - 相当于 Bash 中的 select() 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37049612/

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