Linux下的串口编程:struct termios布局体
当前位置:以往代写 > C/C++ 教程 >Linux下的串口编程:struct termios布局体
2019-06-13

Linux下的串口编程:struct termios布局体

Linux下的串口编程:struct termios布局体

副标题#e#

termios布局体说明

termios布局体中,该布局体一般包罗如下的成员:

tcflag_t c_iflag;

tcflag_t c_oflag;

tcflag_t c_cflag;

tcflag_t c_lflag;

cc_t     c_cc[NCCS];

其详细意义如下

c_iflag:输入模式符号,节制终端输入方法,详细参数如下所示。

c_iflag参数表

键值说明

IGNBRK 忽略BREAK键输入

BRKINT 假如配置了IGNBRK,BREAK键的输入将被忽略,假如配置了BRKINT ,将发生SIGINT间断

IGNPAR 忽略奇偶校验错误

PARMRK 标识奇偶校验错误

INPCK 答允输入奇偶校验

ISTRIP 去除字符的第8个比特

INLCR 将输入的NL(换行)转换成CR(回车)

IGNCR 忽略输入的回车

ICRNL 将输入的回车转化成换行(假如IGNCR未配置的环境下)

IUCLC 将输入的大写字符转换成小写字符(非POSIX)

IXON 答允输入时对XON/XOFF流举办节制

IXANY 输入任何字符将重启遏制的输出

IXOFF 答允输入时对XON/XOFF流举办节制

IMAXBEL 当输入行列满的时候开始响铃,Linux在利用该参数而是认为该参数老是已经配置

c_oflag:输出模式符号,节制终端输出方法,详细参数如下所示。

c_oflag参数

键值说明

OPOST 处理惩罚后输出

OLCUC 将输入的小写字符转换成大写字符(非POSIX)

ONLCR 将输入的NL(换行)转换成CR(回车)及NL(换行)

OCRNL 将输入的CR(回车)转换成NL(换行)

ONOCR 第一行不输出回车符

ONLRET 不输出回车符

OFILL 发送填充字符以延迟终端输出

OFDEL 以ASCII码的DEL作为填充字符,假如未配置该参数,填充字符将是NUL(‘/0’)(非POSIX)

NLDLY 换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s)

CRDLY 回车延迟,取值范畴为:CR0、CR1、CR2和 CR3

TABDLY 程度制表符输出延迟,取值范畴为:TAB0、TAB1、TAB2和TAB3

BSDLY 空格输出延迟,可以取BS0或BS1

VTDLY 垂直制表符输出延迟,可以取VT0或VT1

FFDLY 换页延迟,可以取FF0或FF1

c_cflag:节制模式符号,指定终端硬件节制信息,详细参数如下所示。

c_oflag参数

键值说明

CBAUD 波特率(4+1位)(非POSIX)

CBAUDEX 附加波特率(1位)(非POSIX)

CSIZE 字符长度,取值范畴为CS5、CS6、CS7或CS8

CSTOPB 配置两个遏制位

CREAD 利用吸收器

PARENB 利用奇偶校验

PARODD 对输入利用奇偶校验,对输出利用偶校验

HUPCL 封锁设备时挂起

CLOCAL 忽略调制解调器线路状态

CRTSCTS 利用RTS/CTS流节制

c_lflag:当地模式符号,节制终端编辑成果,详细参数如下所示。

c_lflag参数

键值说明

ISIG 当输入INTR、QUIT、SUSP或DSUSP时,发生相应的信号

ICANON 利用尺度输入模式

XCASE 在ICANON和XCASE同时配置的环境下,终端只利用大写。假如只配置了XCASE,则输入字符将被转换为小写字符,除非字符利用了转义字符(非POSIX,且Linux不支持该参数)

ECHO 显示输入字符

ECHOE 假如ICANON同时配置,ERASE将删除输入的字符,WERASE将删除输入的单词

ECHOK 假如ICANON同时配置,KILL将删除当前行

ECHONL 假如ICANON同时配置,纵然ECHO没有配置依然显示换行符

ECHOPRT 假如ECHO和ICANON同时配置,将删除打印出的字符(非POSIX)

TOSTOP 向靠山输出发送SIGTTOU信号


#p#副标题#e#

与此布局体相关的函数

(一)tcgetattr()

1.原型

int tcgetattr(int fd,struct termois & termios_p);

2.成果

取得终端介质(fd)初始值,并把其值 赋给temios_p;函数可以从靠山历程中挪用;可是,终端属性大概被厥后的前台历程所改变。

(二)tcsetattr()

1.原型

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

2.成果

配置与终端相关的参数 (除非需要底层支持却无法满意),利用 termios_p 引用的 termios 布局。optional_actions (tcsetattr函数的第二个参数)指定了什么时候改变会起浸染:

TCSANOW:改变当即产生

TCSADRAIN:改变在所有写入 fd 的输出都被传输后生效。这个函数该当用于修改影响输出的参数时利用。(当前输出完成时将值改变)

TCSAFLUSH :改变在所有写入 fd 引用的工具的输出都被传输后生效,所有已接管但未读入的输入都在改变产生前扬弃(同TCSADRAIN,但会舍弃当前所有值)。

(三)tcsendbreak()

传送持续的 0 值比特流,一连一段时间,假如终端利用异步串行数据传输的话。假如 duration 是 0,它至少传输 0.25 秒,不会高出 0.5 秒。假如 duration 非零,它发送的时间长度由实现界说。

假如终端并非利用异步串行数据传输,tcsendbreak() 什么都不做。

(四)tcdrain()

期待直到所有写入 fd 引用的工具的输出都被传输。

(五)tcflush()

扬弃要写入 引用的工具,可是尚未传输的数据,可能收到可是尚未读取的数据,取决于 queue_selector 的值:

TCIFLUSH :刷新收到的数据可是不读

TCOFLUSH :刷新写入的数据可是不传送

TCIOFLUSH :同时刷新收到的数据可是不读,而且刷新写入的数据可是不传送

(六)tcflow()

挂起 fd 引用的工具上的数据传输或吸收,取决于 action 的值:

TCOOFF :挂起输出

TCOON :从头开始被挂起的输出

TCIOFF :发送一个 STOP 字符,遏制终端设备向系统传送数据

TCION :发送一个 START 字符,使终端设备向系统传输数据

打开一个终端设备时的默认配置是输入和输出都没有挂起。

(七)波特率函数

被用来获取和配置 termios 布局中,输入和输出波特率的值。新值不会顿时生效,直到乐成挪用了 tcsetattr() 函数。

配置速度为 B0 使得 modem "挂机"。与 B38400 相应的实际比特率可以用 setserial(8) 调解。

输入和输出波特率被生存于 termios 布局中。

cfmakeraw 配置终端属性如下:

termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);

termios_p->c_oflag &= ~OPOST;

termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);

termios_p->c_cflag &= ~(CSIZE|PARENB);

termios_p->c_cflag |= CS8;

1.cfgetospeed() 返回 termios_p 指向的 termios 布局中存储的输出波特率

2.cfsetospeed() 配置 termios_p 指向的 termios 布局中存储的输出波特率为 speed。取值必需是以下常量之一:

#p#分页标题#e#

B0        B50        B75        B110        B134        B150        B200        B300        B600        B1200        B1800        B2400        B4800        B9600        B19200        B38400        B57600        B115200        B230400

个中:零值 B0 用来间断毗连。假如指定了 B0,不应当再假定存在毗连。凡是,这样将断开毗连。CBAUDEX 是一个掩码,指示高于 POSIX.1 界说的速度的那一些 (57600 及以上)。因此,B57600 & CBAUDEX 为非零。

3.cfgetispeed() 返回 termios 布局中存储的输入波特率。

4.cfsetispeed() 配置 termios 布局中存储的输入波特率为 speed。假如输入波特率被设为0,实际输入波特率将便是输出波特率。

RETURN VALUE 返回值

1.cfgetispeed() 返回 termios 布局中存储的输入波特率。

2.cfgetospeed() 返回 termios 布局中存储的输出波特率。

3.其他函数返回:

(1)0:乐成

(2)  -1:失败,

 而且为 errno 置值来指示错误。

留意 tcsetattr() 返回乐成,假如任何所要求的修改可以实现的话。因此,当举办多重修改时,该当在这个函数之后再次挪用 tcgetattr() 来检测是否所有修改都乐成实现

本文出自 “驿落薄暮” 博客,请务必保存此出处http://yiluohuanghun.blog.51cto.com/3407300/1182210

    关键字:

在线提交作业