LINUX串口一次不能全部读取串口内容

菜鸟级别的问题,希望对像我一样的人有所帮助。
我在做一个串口通信,上位机通过串口向控制板发送信号,信号的长度为23个字节。我使用Linux编程,自带的read()函数,用一个50个自己的数组来读,但是读取的字节数为8,9,13等不确定长度。不知道怎么做,想起来以前有个师兄跟我提过,单片机读取串口时,是一个字节一个字节读的,然后把读到帧头的数据,然后按照一定顺序往后读取定长的字节就好。
我问了个员工,他跟我解释说,串口通信是要时间的,比如你先读了一次,但是那边还没发完的概率是非常大的,所以,需要开辟一个缓存区,来保存你收到的内容,你要把收到第一次之后,然后再接着读取你需要的数据长度,这样就好了。
于是我就修改了我的代码,我每次读取的长度为8个字节,实际测试之后,可能会读到6个到8个字节,但多读几次就能都读全了。我的串口打开之后,一直在循环读取串口内容。代码如下,希望对需要的人有帮助。

char cmd_buf[23]; char rv_buf[8]; int ret_len,temp,i; int len_sum = 0; while(1) { ret_len = read(cmd_com_fd,rv_buf,8); len_sum += ret_len; //printf("读取数据长度:%d\t数据总长度:%d\n",ret_len,len_sum); if(ret_len <= 0)//如果没有读取到数据继续等待读取 { len_sum = 0; continue; } if(ret_len >0 && len_sum<23)//如果读取数据大于0,而且总长度小于23,数据拷贝,继续读 { for(i=0; i0 && len_sum>=23)//如果读取数据大于0,而且总长度大于等于23,数据拷贝,往下走 { for(i=0; i

【LINUX串口一次不能全部读取串口内容】

    推荐阅读