我已在非阻止模式模式下打开 / dev / ttyACM0 。
我正在使用选择来了解数据何时可用。
当选择返回时,我可以通过读取功能读取串口到达的所有数据。
问题是,如果我尝试阅读更多数据,读取会返回 0 。
这不是正确的行为。
说明:
在非阻塞模式中打开套接字时, select 会在数据可用时返回,并且可以调用 read 函数来检索数据
但是,在没有数据要读取的套接字上调用 read 将导致读取返回 -1 ,而不是 0
关联的 errno 是 EWOULDBLOCK ,这是正确的。
在串口描述符的情况下,除了 read 在没有数据时返回 0 并且 errno 也是的 0
对于套接字,读取返回 0 表示远程已关闭其会话结束,这应该是您关闭连接本地端的时刻
实际上,串口读取返回 0 ,但端口不已关闭。
有没有办法初始化通讯端口,使其行为与套接字相同?
谢谢
答案 0 :(得分:0)
如果您只想从无数据中区分设备移除(从父总线拔出串行端口,例如USB或强制驱动程序卸载),请调用其结果不依赖于接收缓冲区的API。
例如,只要设备仍然存在,tcgetattr
应该成功,无论是否有数据。
如果要检测串行电缆的断开,则需要硬件握手或超时。