控制终端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:非终端的文件描述符。

 

posted @ 2015-02-25 13:17  周人假的  阅读(2692)  评论(0编辑  收藏  举报