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

时间:2014-08-26 11:57:44

标签: linux

unsigned char buf[256];
num = read (fd, &buf, sizeof (buf));

我有一个以100ms速率读取串口的程序。设备每100ms最多可发送120个字节的数据。我有时观察read()返回256(buf [的大小,我传入read())。因此,所有字节都混淆了,我看到校验和失败。

有没有办法,如果有数据并且只读取有效数据,我可以在文件描述符上进行轮询。

1 个答案:

答案 0 :(得分:0)

是的!您可以使用poll()select()函数来了解数据何时可用,但您不确切知道具体数量。为此,如果它每次都是固定大小的消息,你可以做120字节的常规阻塞读取,或者你必须读取较小的部分,比如一旦你知道大小,首先是标题从标题中,或者您可以将大块读入环形缓冲区并按照您想要的用户空间处理它们。