![如何轮询串行输入?](https://linux22.com/image/208978/%E5%A6%82%E4%BD%95%E8%BD%AE%E8%AF%A2%E4%B8%B2%E8%A1%8C%E8%BE%93%E5%85%A5%EF%BC%9F.png)
所以我有一个设备以设定的帧速率(10 fps 或其他)传输整数。它通过 USB 电缆连接到我的 Linux 机器 (ubuntu 20.04),在该机器上它被识别为 ttyACM0。我可以捕捉这个开发人员并查看收到的输入。
然而,我想做的是用 c 或 bash 编写一个函数/脚本,它轮询设备。因此,理想情况下,99% 的情况下,如果收到任何新输入,它都会去读取。如果没有,则不返回任何内容,但是如果您轮询并且已收到其中一个帧整数,则返回该值。
解决这个问题的最佳方法是什么?事件驱动的方法是否会更好/更准确,因此每当收到帧或其他内容时都会触发回调?
答案1
你从字面上描述了poll
系统调用/libc 包装函数。您可以直接从 C/C++ 使用它,或者通过select
模块在Python中。使用poll
超时为 0。
Bash 没有poll
或select
功能。你正在做的事情并不真正符合 shell 脚本的思想。 (这就是我上面提到 Python 的原因——对于许多用例而言,几乎与 shell 脚本一样简单,使得此类数据处理变得更加容易,而无需诉诸 C++ 或 C(如果您所做的一切,我鼓励您避免使用 C++ 或 C)正在处理数据——正是正确的自动生命周期、类型安全、实际容器类型和更好的 C++ 流程控制使您的生活不仅更轻松,而且更安全))。