2014-02-23 186 views
0

我有下一个情况我有一个循环从串口读取gprs中的数据,并且这个数据存储在名为c的char缓冲区中,但是在我需要清理缓冲区之前只打印来自我的gprs而不是之前发送的命令。 我的代码:在c中清理char缓冲区

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但我无法弄清楚。

+2

在读入缓冲区之前,您不需要清除缓冲区。 'read()'会覆盖所有内容。 – Barmar

+0

“fflush”的参数应该是像stdout这样的流,而不是缓冲区地址。 – Barmar

回答

0

cchar所以你不一定需要清理它,特别是如果你然后要用read覆盖它。

if(read(tty_fd,&c,1)>0) 

这条线可以防止代码执行所述write功能,除非read已经返回一个大于0的值这意味着c已overwrited。

+0

所以为什么要在stout中打印“r \ ok”而不是“ok”,而不是我的gprs的响应,(“at \ r”)是我发送给gprs的字符串。 – Premier

+0

好吧,你是对的,我发现错误,这是在gprs模块配置,它给我一个回声,这让我困惑。非常感谢 – Premier