zoukankan      html  css  js  c++  java
  • 控制终端tcgetattr函数与tcsetattr函数

    tcgetattr(fd,&oldios); //获得与终端相关的参数,参数保存在oldios中

    newios.c_cflag = nSpeed | CS8 | CLOCAL | CREAD;

        //newios.c_cflag &=~CRTSCTS;

        newios.c_iflag = IGNPAR;

        newios.c_oflag = 0; 

        newios.c_lflag =   0; 

        newios.c_cc[VTIME] = 0;

        newios.c_cc[VMIN] = 1;

    可以得到波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控制等,

    tcflush函数刷清(扔掉)输入缓存(终端驱动法度已接管到,但用户法度尚未读)或输出缓存(用户法度已经写,但尚未发送).

    int tcflush(int filedes,int quene)

      quene数该当是下列三个常数之一:

        *TCIFLUSH  刷清输入队列

        *TCOFLUSH  刷清输出队列

        *TCIOFLUSH 刷清输入、输出队列

      例如:tcflush(fd,TCIFLUSH);

    在打开串口后,串口其实已经可以开始读取 数据了 ,这段时间用户如果没有读取,将保存在缓冲区里,如果用户不想要开始的一段数据,或者发现缓冲区数据有误,可以使用这个函数清空缓冲

    tcflush(fdcom, TCIFLUSH);

    sleep(2);

    RecvLen = PortRecv(fdcom, RecvBuf, 10, portinfo.baudrate);

    这样,在sleep之前发的数据都被清空了。

      #include<termios.h>

    函数原型折叠编辑本段

    int tcsetattr( int fd, int optional_actions, const struct termios *termios_p );

      tcsetattr函数用于设置终端参数。函数在成功的时候返回0,失败的时候返回-1,并设置errno的值。参数fd为打开的终端文件描述符,参数optional_actions用于控制修改起作用的时间,而结构体termios_p中保存了要修改的参数。optional_actions可以取如下的值。
    TCSANOW:不等数据传输完毕就立即改变属性。
    TCSADRAIN:等待所有数据传输结束才改变属性。
    TCSAFLUSH:清空输入输出缓冲区才改变属性。
    错误信息
    EBADF:非法的文件描述符。
    EINTR:tcsetattr函数调用被信号中断。
    EINVAL:参数optional_actions使用了非法值,或参数termios中使用了非法值。
    ENCTTY:非终端的文件描述符。

  • 相关阅读:
    AtCoder Grand Contest 005F
    AtCoder Regular Contest 095E
    插头DP--URAL1519Formula 1
    「CodePlus 2018 3 月赛」白金元首与莫斯科
    hdu 5795
    hdu 5800
    HDU5802
    hdu 5787 数位dp,记忆化搜索
    poj 1015
    hdu 3092 (简化的素数打表+dp+log的用法) ps(开数组和预处理时数组要大点处理多一点。。。)
  • 原文地址:https://www.cnblogs.com/zhouhbing/p/4299445.html
Copyright © 2011-2022 走看看