2014-02-23 137 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