我遇到下一种情况,我有一个循环,可通过串行端口从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,但无法弄清楚。

最佳答案

cchar,因此您不必清除它,尤其是如果您随后要用read覆盖它时。

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


该行阻止您的代码执行write函数,除非read返回的值大于0。这意味着c已被覆盖。

09-30 21:38