我遇到下一种情况,我有一个循环,可通过串行端口从gprs读取数据,该数据存储在名为c的char缓冲区中,但是在我需要清洗缓冲区以仅打印来自我的gprs的响应而不是先前的命令之前,已发送。
我的代码:
while(ciclo)
{
c=data[i];
i++;
if(c != '\0')
{
write(tty_fd,&c,1);
}
else
{
ciclo = false;
}
}
ciclo = true;
//int veces = 0;
//here I need clean c var
while(ciclo)
{
nanosleep((struct timespec[]){{0, INTERVAL_MS}}, NULL);
//veces++;
//printf("durmio 0,5 por %i vez \n",veces);
fflush(&c);
if(read(tty_fd,&c,1)>0)
{
write(STDOUT_FILENO,&c,1);
//append(respuesta,c);
//printf("respuesta %s",respuesta);
}
else
{
ciclo = false;
}
}
我尝试使用fflush和fpurge,但无法弄清楚。
最佳答案
c
是char
,因此您不必清除它,尤其是如果您随后要用read
覆盖它时。
if(read(tty_fd,&c,1)>0)
该行阻止您的代码执行
write
函数,除非read
返回的值大于0。这意味着c
已被覆盖。