8.5获取和设置终端属性
设置和获取终端控制属性是通过tcgetattr和tcsetattr两个函数来完成的
tcgetattr函数
头文件:
#include
函数原型:
int tcgetattr(int filedes, struct termios *termptr);
参数:
int filedes - 文件描述符
struct termiso *termptr - 指向termios结构的指针,
返回值:
如果成功返回0,否则返回-1
tcsetattr函数
头文件:
#include
函数原型:
int tcsetattr(int filedes, int opt, const struct termios *termptr);
参数:
int filedes - 文件描述符
int opt - 选项值,可以为下面三个值之一
TCSANOW - 不等数据传输完毕就改变属性
TCSADRAIN - 等待所有数据传输结束才改变属性
TCSAFLUSH - 清空输入输出缓冲区并且是设置属性
const struct termios *termptr - 指向termios结构的指针,
返回值:
成功返回0,否则返回-1
九、常用设置
9.1设置规范模式
规范模式是面向行的输入方式,输入字符被放入用于和用户交互可以编辑的缓冲区内,直接到读入回车或者换行符号时才结束。
可以通过如下方式来设置
option.c_lflag |= (ICANON | ECHO | ECHOE);
9.2设置原始输入模式
原始输入模式是没有处理过的,当接收数据时,输入的字符在它们被接收后立即被传送,使用原始输入模式时候,一般可以选择取消ICANON,ECHO,ECHOE和ISIG选项。
例如:
option.c_lflag &= ~(ICANO9.3设置输入奇偶选项
当激活c_cflag中的奇偶校验后,应该激活输入的奇偶校验。与之相关的标志有INPCK,IGNPAR,PARMRK和ISTRIP。一般是通过选择INPCK和ISTRIP激活检验和移除奇偶位。
例如:
option.c_iflag |= (INPCK | ISTRIP);
9.4设置软件控制流
软件控制流通过IXON,IXOFF和IXANY标志来设置
例如:
option.c_iflag |=(IXON | IXOFF | IXANY);
9.5选择预处理输出
通过OPOST标志来设置预处理的输出
例如:
option.c_oflag |= OPOST;
9.6选择原始数据输出
原始数据的输出通过设置c_oflag的OPOST标志
例如:
option.c_oflag &= ~OPOST;
9.7设置软件流控制字符
软件流控制字符是通过c_cc数组中的VSTART和VSTOP来设置的,一般来说,它们应该被设置城DC1(021八进制)和DC3(023八进制),分别表示ASCII码的XON和XOFF字符。
9.8设置读超时
c_cc数组中的VMIN指定了最少读取的字符数,如果设置为0,那么VTIME就指定了读取每个字符的等待时间。VTIME是以1/10秒为单位指定接收字符的超时时间的,如果VTIME设置为0,而端口没有用open或者fcntl设置为NONBLOCK,那么read操作将会阻塞不确定的时间。
十、参考资料
1.《Serial Programming Guide for POSIX Operating Systems》5th Edition Michael R.Sweet
2.《Linux 下串口编程入门》左锦
3.《Advanced Programming in the UNIX Environment》 W.Richard Stevens
4.《Linux Serial Programming HOWTO》
5.《Unix Systems Programming》Kay A.Robbins & Steven Robbins
6.《Linux Programming by Example》Arnold Robbins
7.《Linux Programmer's Manual》
N | ECHO | ECHOE);
来源:csdn 作者:姜江