如何在C中分离缓冲区结果

时间:2013-05-31 12:04:19

标签: c linux codeblocks

我每隔5秒钟从TTL设备接收数据。我正在使用Raspbian(像Debian),因为我有一个Raspberry Pi。使用Cutecom模拟器我收到:

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.45,Dw=10.19,VCC=3.85V)

5secs后

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)

我正在尝试使用Codeblocks在C中实现此功能。我有一个打开串口的功能,一个配置功能和以下读取缓冲区的功能。我只使用for循环2个循环。

int learn_port(int fd)
{
   int n;
 for (int x = 0; x<2; x++)
 {
  char buff[300];
  memset(buff, 0, sizeof(buff));
  n=read(fd,buff,300);
  printf("%s\n", buff);
 }
}

现在,我的问题是我每5个secons就有3个结果,比如

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.45,Dw=10.19,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.49,Dw=10.21,VCC=3.85V)

5秒后

+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)
+PARAM: 44 BYTES FROM 0000:0000 (048)
MACHINE_1:(T=23.32,HR=43.52,Dw=10.22,VCC=3.85V)

我的第一个想法是改变缓冲区的大小。使其类似于第一行的大小。它工作,但有时设备发送给我更多的字符,然后我有可怕的结果。我可以做些什么来分离这3个结果/ 5秒到1结果/ 5秒像Cutecom的结果?如果您需要更多详细信息,我可以发送给您。

1 个答案:

答案 0 :(得分:1)

我的猜测:您不会检查read的返回代码。

可能是read在循环中第二次和第三次没有返回任何内容,但缓冲区仍然包含旧数据吗?