Linux - select()调用没有在我期望的时候返回

时间:2014-10-24 03:19:37

标签: c++ c linux select serial-port

我有一个从串口读取数据的C ++应用程序但是我看到了一些关于完成选择调用所花费的时间的奇怪行为。我试图从其他设备读取一些数据,这些数据以115200波特率流出5 kB块,在整个事务期间,该设备总共流出200 kB。实际的读取调用一次抓取512个字节。

当抓取5 kB块时,第一次选择调用需要大约475ms,然后后续需要48ms。所以看起来select只在所有数据到达端口时才解锁。由于波长为115200的475ms,因此大约为5kB。然后48ms给我带来大约512个字节,这是我设备上UART缓冲区的大小。奇怪的是,当抓住最后3-4个区块时,第一个选择呼叫在48ms内返回,这是我首先期望它做的。

从我收集的内容来看,选择是阻塞,直到设备完成通过UART写入所有数据,因为它只是每个块中的初始数据影响。如果在设备上读取任何数据,是否应该选择返回?或者它还有其他一些需要寻找的条件吗?有没有办法我可以配置我的串口,一旦手柄上有数据可以从select返回?

0 个答案:

没有答案