Linux串口读取()返回传入的最大缓冲区大小

Linux串口读取()返回传入的最大缓冲区大小,linux,Linux,我有一个以100ms速率读取串行端口的程序。该设备每100ms最多可发送120字节的数据。我有时观察到read()返回256(buf[]的大小,我已将其传递给read()。正因为如此,所有字节都混在一起,我看到校验和失败 有没有一种方法,我可以在文件描述符上轮询是否有数据,并且只读取有效数据 是的!您可以使用函数poll()或select()来了解数据何时可用,但无法确切知道数据量。为此,如果每次都是固定大小的消息,您可以执行120字节的常规分块读取,或者您必须先读取较小的部分,比如从消息头知道

我有一个以100ms速率读取串行端口的程序。该设备每100ms最多可发送120字节的数据。我有时观察到read()返回256(buf[]的大小,我已将其传递给read()。正因为如此,所有字节都混在一起,我看到校验和失败


有没有一种方法,我可以在文件描述符上轮询是否有数据,并且只读取有效数据

是的!您可以使用函数
poll()
select()
来了解数据何时可用,但无法确切知道数据量。为此,如果每次都是固定大小的消息,您可以执行120字节的常规分块读取,或者您必须先读取较小的部分,比如从消息头知道大小后再读取正文,或者您可以将大数据块读取到环形缓冲区中,并在用户空间中按照自己的意愿进行处理。

是的。我尝试过使用select(),但问题仍然存在,read()返回最大缓冲区大小。我只是想知道有没有一种方法可以在数据可以读取时得到中断。我可以逐字节读取,而不是将整个缓冲区传递给read()API。您可以一次读取一个字节,但效率不高。更好的方法是将一大块数据读入缓冲区并处理所需的部分,其余部分留到以后阅读更多内容以获取下一条消息时使用。
unsigned char buf[256];
num = read (fd, &buf, sizeof (buf));