struct termios结构体—Linux串口.doc

Linux串口struct termios结构体 分类 转载 2010-10-20 1349 1294人阅读 评论3 收藏 举报 一、数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。 这个结 构包含了至少下列成员 tcflag_t c_iflag; /* 输入模式 */ tcflag_t c_oflag; /* 输出模式 */ tcflag_t c_cflag; /* 控制模式 */ tcflag_t c_lflag; /* 本地模式 */ cc_t c_ccNCCS; /* 控制字符 */ struct termios unsigned short c_iflag; /* 输入模式标志*/ unsigned short c_oflag; /* 输出模式标志*/ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /*区域模式标志或本地模式标志或局部模式*/ unsigned char c_line; /*行控制line discipline */ unsigned char c_ccNCC; /* 控制字符特性*/ ; 二、作用 这个变量被用来提供一个健全的线路设置集 合, 如果这个端口在被用户初始化前 使用. 驱动初始化这个变量使用一个标准的数值集, 它拷贝自 tty_std_termios 变量. tty_std_termos 在 tty 核心被定义为 struct termios tty_std_termios .c_iflag ICRNL | IXON, .c_oflag OPOST | ONLCR, .c_cflag B38400 | CS8 | CREAD | HUPCL, .c_lflag ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE | IEXTEN, .c_cc INIT_C_CC ; 这个 struct termios 结构用来持有所有的当前线路设置, 给这个 tty 设备的一个特定端口. 这些线路设置控制当前波特率, 数据大小, 数据流控设置, 以及许多其他值. 三、成员的值 (一)c_iflag 标志常量 mode 输入模式 mode可以在输入值传给程序之前控制其处理的方式。 其中输入值可能是由序列埠或键盘的终端驱动程序所接收到的字元。 我们可以利用termios结构的c_iflag的标志来加以控制,其定义的方式皆以OR来加 以组合。 * * IGNBRK 忽略输入中的 BREAK 状态。 (忽略命 令行中的中 断) * BRKINT (命令行出 现中断时,可产生一插断)如果设置了 IGNBRK,将忽略 BREAK。如果没有设置,但是设置了 BRKINT, 那么 BREAK 将使得输入和输出队列被刷新,如果终端是一个前 台进程组的控制终端,这个进程组中所有进程将收到 SIGINT 信 号。如果既未设置 IGNBRK 也未设置 BRKINT,BREAK 将视为与 NUL 字符同义,除非设置了 PARMRK,这种情况下它被视为序列 377 。 * IGNPAR 忽略桢错误和奇偶校验错。 * PARMRK 如果没有设置 IGNPAR,在有奇偶校验错或桢错误的字 符前插入 377 。如果既没有设置 IGNPAR 也没有设置 PARMRK,将有奇偶校验错或桢错误的字符视为 。 * INPCK 启用输入奇偶检测。 * ISTRIP 去掉第八位。 * INLCR 将输入中的 NL 翻译为 CR。(将收到 的换行符号转换 为Return) * IGNCR 忽略输入中的回车。 * ICRNL 将输入中的回车翻译为新行 除非设置了 IGNCR否则 当输入信号有 CR 时不会终止输入。 * IUCLC 不属于 POSIX 将输入中的大写字母映射为小写字 母。 * IXON 启用输出的 XON/XOFF 流控制。 * IXANY 不属于 POSIX.1;XSI 允许任何字符来重新开始输 出。 * IXOFF 启用输入的 XON/XOFF 流控制。 * IMAXBEL不属于 POSIX 当输入队列满时响零。Linux 没有实 现这一位,总是将它视为已设置。 二 c_oflag 标志常量Output mode 输 出模式 Output mode主要负责控制输出字元的处理方式。输出字元在传送到序列埠或显示 器之前是如何被程序来处理。 输出模式是利用termios结构的c_oflag的标志来加以控制,其定义的方式皆以OR来 加以组合。 * * OPOST 启用具体实现自行定义的输出处理。 * OLCUC 不属于 POSIX 将输出中的小写字母映射为大写字 母。 * ONLCR XSI 将输出中的新行符映射为回车-换行。 * OCRNL 将输出中的回车映射为新行符 * ONOCR 不在第 0 列输出回车。 * ONLRET 不输出回车。 * OFILL 发送填充字符作为延时,而不是使用定时来延时。 * OFDEL 不属于 POSIX 填充字符是 ASCII DEL 0177。如果 不设置,填充字符则是 ASCII NUL。 * NLDLY 新行延时掩码。取值为 NL0 和 NL1。 * CRDLY 回车延时掩码。取值为 CR0, CR1, CR2, 或 CR3。 * TABDLY 水平跳格延时掩码。取值为 TAB0, TAB1, TAB2, TAB3 或 XTABS。取值为 TAB3,即 XTABS,将扩展跳格为空格 每 个跳格符填充 8 个空格。 * BSDLY 回退延时掩码。取值为 BS0 或 BS1。从来没有被实现 过 * VTDLY 竖直跳格延时掩码。取值为 VT0 或 VT1。 * FFDLY 进表延时掩码。取值为 FF0 或 FF1。 (三)c_cflag 标志常量Control mode 控制模式 Control mode主要用于控制终端设备的硬件设置。利用termios结构的c_cflag的标 志来加以控制。控制模式用在序列线连接到数据设备,也可以用在与终 端设备的 交谈。 一般来说,改变终端设备的组 态要比使用termios的控制模式来改变行lines的 行为来得容易。 * * CBAUD 不属于 POSIX 波特率掩码 41 位。 * CBAUDEX 不属于 POSIX 扩展的波特率掩码 1 位,包含在 CBAUD 中。 * POSIX 规定波特率存储在 termios 结构中,并未精确指定它的 位置,而是提供了函数 cfgetispeed 和 cfsetispeed 来存 取它。一些系统使用 c_cflag 中 CBAUD 选择的位,其他系统使 用单独的变量,例如 sg_ispeed 和 sg_ospeed 。 * CSIZE字符长度掩码(传送或接收字元时用的位数)。 取值为 CS5(传送或接收字元时用5bits), CS6, CS7, 或 CS8。 * CSTOPB 设置两个停止位,而不是一个。 * CREAD 打开接受者。 * PARENB 允许输出产生奇偶信息以及输入的奇偶校验(启用同 位产生与侦测)。 * PARODD 输入和输出是奇校验(使用奇同位而非偶同位)。 * HUPCL 在最后一个进程关闭设备后,降低 modem 控制线 挂 断。 * CLOCAL 忽略 modem 控制线。 * LOBLK 不属于 POSIX 从非当前 shell 层阻塞输出用于 shl 。 * CIBAUD 不属于 POSIX 输入速度的掩码。CIBAUD 各位的值与 CBAUD 各位相同,左移了 IBSHIFT 位。 * CRTSCTS 不属于 POSIX 启用 RTS/CTS 硬件 流控制。 四c_lflag 标志常量Local mode 局部模式 Local mode主要用来控制终端设备不同的特色。利用termios结构里的 c_lflag的标志来设定局部模式。 在巨集中有两个比较重要的标志 1.ECHO它可以让你阻止键入字元的回应。 2.ICANON正规模式标志,它可以对所接收的字元在两种不同的终端设备 模式之间来回切 换。 * ISIG当接受到字符 INTR, QUIT, SUSP, 或 DSUSP 时,产生相 应的信号。 * ICANON启用标准模式 canonical mode。允许使用特殊字符 EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS, 和 WERASE,以及按行的缓冲。 * XCASE不属于 POSIX; Linux 下不被支持 如果同时设置了 ICANON,终端只有大写。输入被转换为小写,除了有前缀的字 符。输出时,大写字符被前缀(某些系统指定的特定字符) , 小写字符被转换成大写。 * ECHO 回显输入字符。 * ECHOE 如果同时设置了 ICANON,字符 ERASE 擦除前一个输入 字符,WERASE 擦除前一个词。 * ECHOK 如果同时设置了 ICANON,字符 KILL 删除当前行。 * ECHONL 如果同时设置了 ICANON,回显字符 NL,即使没有设 置 ECHO。 * ECHOCTL 不属于 POSIX 如果同时设置了 ECHO,除了 TAB, NL, START, 和 STOP 之外的 ASCII 控制信号被回显为 X, 这 里 X 是比控制信号大 0 x40 的 ASCII 码。例如,字符 0 x08 BS 被回显为 H。 * ECHOPRT 不属于 POSIX 如果同时设置了 ICANON 和 IECHO,字符在删除的同时被打印。 * ECHOKE 不属于 POSIX 如果同时设置了 ICANON,回显 KILL 时将删除一行中的每个字符,如同指定了 ECHOE 和 ECHOPRT 一 样。 * DEFECHO 不属于 POSIX 只在一个进程读的时候回显。 * O 不属于 POSIX; Linux 下不被支持 输出被刷新。这 个标志可以通过键入字符 DISCARD 来开关。 * NOFLSH 禁止在产生 SIGINT, SIGQUIT 和 SIGSUSP 信号时刷新 输入和输出队列,即关闭queue中的。 * TOSTOP 向试图写控制终端的后台进程组发送 SIGTTOU 信号 (传送欲写入的信息到后台 处理)。 * PENDIN 不属于 POSIX; Linux 下不被支持 在读入下一个字 符时,输入队列中所有字符被重新输出。bash 用它来处理 typeahead * IEXTEN 启用实现自定义的输入处理。这个标志必须与 ICANON 同时使用,才能解释特殊字符 EOL2,LNEXT,REPRINT 和 WERASE,IUCLC 标志才有效。 (五)c_cc 数组特殊控制字元 可提供使用者设定一些特殊的功能, 如CtrlC的字元组合。 特殊控制字元主要是利用termios结构里c_cc的阵列成员 来做设定。 c_cc阵列主要用于正规与非正规两种环境,但要注意的是正规与非正规不 可混为一谈。 其定义了特殊的控制字符。符号下标 初始值 和意义为 * VINTR003, ETX, Ctrl-C, or also 0177, DEL, rubout 中 断字符。发出 SIGINT 信号。当设置 ISIG 时可被识别,不再作 为输入传递。 * VQUIT 034, FS, Ctrl- 退出字符。发出 SIGQUIT 信号。当 设置 ISIG 时可被识别,不再作为输入传递。 * VERASE 0177, DEL, rubout, or 010, BS, Ctrl-H, or also 删除字符。删除上一个还没有删掉的字符,但不删除上一个 EOF 或行首。当设置 ICANON 时可被识别,不再作为输入传 递。 * VKILL 025, NAK, Ctrl-U, or Ctrl-X, or also 终止字 符。删除自上一个 EOF 或行首以来的输入。当设置 ICANON 时 可被识别,不再作为输入传递。 * VEOF 004, EOT, Ctrl-D 文件尾字符。更精确地说,这个字 符使得 tty 缓冲中的内容被送到等待输入的用户程序中,而不 必等到 EOL。如果它是一行的第一个字符,那么用户程序的 read 将返回 0,指示读到了 EOF。当设置 ICANON 时可被识 别,不再作为输入传递。 * VMIN 非 canonical 模式读的最小字符数(MIN 主要是表示能 满足read的最小字元数)。 * VEOL 0, NUL 附加的行尾字符。当设置 ICANON 时可被识 别。 * VTIME 非 canonical 模式读时的延时,以十分之一秒为单 位。 * VEOL2 not in POSIX; 0, NUL 另一个行尾字符。当设置 ICANON 时可被识别。 * VSWTCH not in POSIX; not supported under Linux; 0, NUL 开关字符。只为 shl 所用。 * VSTART 021, DC1, Ctrl-Q 开始字符。重新开始被 Stop 字 符中止的输出。当设置 IXON 时可被识别,不再作为输入传 递。 * VSTOP 023, DC3, Ctrl-S 停止字符。停止输出,直到键入 Start 字符。当设置 IXON 时可被识别,不再作为输入传递。 * VSUSP 032, SUB, Ctrl-Z 挂起字符。发送 SIGTSTP 信号。 当设置 ISIG 时可被识别,不再作为输入传递。 * VDSUSP not in POSIX; not supported under Linux; 031, EM, Ctrl-Y 延时挂起信号。当用户程序读到这个字符时,发送 SIGTSTP 信号。当设置 IEXTEN 和 ISIG,并且系统支持作业管 理时可被识别,不再作为输入传递。 * VLNEXT not in POSIX; 026, SYN, Ctrl-V 字面上的下一 个。引用下一个输入字符,取消它的任何特殊含义。当设置 IEXTEN 时可被识别,不再作为输入传递。 * VWERASE not in POSIX; 027, ETB, Ctrl-W 删除词。当设 置 ICANON 和 IEXTEN 时可被识别,不再作为输入传递。 * VREPRINT not in POSIX; 022, DC2, Ctrl-R 重新输出未读 的字符。当设置 ICANON 和 IEXTEN 时可被识别,不再作为输入 传递。 * VDISCARD not in POSIX; not supported under Linux; 017, SI, Ctrl-O 开关开始/结束丢弃未完成的输出。当设置 IEXTEN 时可被识别,不再作为输入传递。 * VSTATUS not in POSIX; not supported under Linux; status request 024, DC4, Ctrl-T. * 这些符号下标值是互不相同的,除了 VTIME,VMIN 的值可能分 别与 VEOL,VEOF 相同。 在 non-canonical 模式下,特殊字 符的含义更改为延时含义。MIN 表示应当被读入的最小字符数。 TIME 是以十分之一秒为单位的计时器。如果同时设置了它们, read 将等待直到至少读入一个字符,一旦读入 MIN 个字符或者 从上次读入字符开始经过了 TIME 时间就立即返回。如果只设置 了 MIN,read 在读入 MIN 个字符之前不会返回。如果只设置了 TIME,read 将在至少读入一个字符,或者计时器超时的时候立 即返回。如果都没有设置,read 将立即返回,只给出当前准备 好的字符。 MIN与 TIME组合有以下四种 1、 MIN 0 , TIME 0 有READ立即回传 否则传回 0 ,不读取任何字元 2、 MIN 0 , TIME 0 READ 传回读到的字元,或在十分之一秒后传回 TIME 若来不及读到任何字元,则传回0 3、 MIN 0 , TIME 0 READ 会等待,直到MIN字元可读 4、 MIN 0 , TIME 0 每一格字元之间计时器即会被启动 READ 会在读到MIN字元,传回值或TIME的字元计 时1/10秒超过时将值 传回 四、 与此结构体相关的函数 (一)tcgetattr 1.原型 int tcgetattrint fd,struct termois 2.功能 取得终端介质(fd)初始值,并把其值 赋给temios_p;函数可以从后台进 程中调用;但是,终端属性可能被后来的前 台进程所改变。

linux串口结构termios,struct termios结构体—Linux串口.doc相关推荐

  1. Linux总线驱动-02: struct bus_type 结构体

    http://blog.csdn.net/cppgp/article/details/6333359 本文测试系统为:Ubuntu 10.10 x86_64 2.6.35-24-generic 上节中 ...

  2. linux tty结构体,linux tty驱动架构分析

    再看Linux tty驱动过程中发现linux的驱动构架中,面向对象的思想已经根深蒂固.就比如这串口驱动,代码中经常有一些貌似和串口无关的代码,比如,tty_register_driver等.但我们却 ...

  3. struct termios结构体【转】

    本文转载自:http://blog.csdn.net/vevenlcf/article/details/51096122 一.数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步通 ...

  4. struct termios结构体

    一.数据成员 termios函数簇提供了一个常规的终端接口,用于控制非同步通信端口.这个结构包含了至少下列成员: tcflag_t  c_iflag;//输入模式 tcflag_t  c_oflag; ...

  5. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

  6. struct sockaddr_nl 结构体 由来、含义以及使用——获取Linux路由表

    From: http://yangelc.blog.sohu.com/68245920.html Linux 用户态与内核态的交互   在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与 ...

  7. linux系统中struct timeval结构体、struct timezone结构体以及gettimeofday函数

    格林尼治时间.协调世界时 间.世界时间.日光节约时间以及时区等介绍: 格林尼治时间(Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,因为本初子午 ...

  8. Linux 物理内存管理涉及的三大结构体之struct zone

    从Linux 物理内存管理涉及的三大结构体之struct page 中,大概知道了UMA和NUMA概念,同时也知道在每个node对应的内存范围内,都会将其分成不同的内存管理区域zone.之所以分成几类 ...

  9. linux device结构体,struct device结构体

    一.定义: linux/include/linux/device.h struct device { struct klist     klist_children; struct klist_nod ...

  10. Linux 串口编程三 使用termios与API进行串口程序开发

    在 termios 结构体以及内部终端控制标志中,并非所有的参数对于实际的物理串口都是有效的,在使用过程中也不需要对于所有标志的作用都有所理解.事实上,快速掌握一项技术的核心点也是一种学习能力.对于使 ...

最新文章

  1. android onTouch()与onTouchEvent()的区别
  2. 『高级篇』docker容器来说什么是微服务(三)
  3. 在vue项目中对axios进行封装
  4. 调用face++平台api进行人脸识别
  5. mysql主从同步监控小脚本(加强版)
  6. qss样式表笔记大全(一):qss名词解析(包含相关示例)
  7. 升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...
  8. envoy实现_如何利用 Envoy 的 Postgres 过滤器实现网络可观察性
  9. 论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全
  10. c#中的socket(tcp)
  11. SpringCloud04 服务配置中心、消息总线、远程配置动态刷新
  12. Densenet论文解读 深度学习领域论文分析博主
  13. 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击...
  14. mapabc全国兴趣点、商户数据、poi数据,一共1490多万条,包含地址、电话、经纬度、类别...
  15. 【转】The C10K problem(翻译 中文版)
  16. 初赛知识点汇总(阶段性完结
  17. java免费浏览器,Java swing实现简单的浏览器源码免费分享
  18. 2012年中国最佳医院排行榜
  19. 突破老旧OA系统局限,打通五大业务管理体系,让效率“狂飙”
  20. linux服务器留后门,Linux下留本地后门的两个方法

热门文章

  1. java多边形生成_如何为凹多边形生成回声路径
  2. 版本控制git之一-仓库管理
  3. 大数据技术之Spark入门(一)概述
  4. android 4.4.2截屏方法,Android截屏截图的几种方法总结
  5. wdr通刷固件_西数硬盘维修工具WDR5.3简体中文版下载及图文教程
  6. c programe language learn notes 2
  7. TB6612FNG 驱动学习笔记
  8. 小牛各个版本的限速破解方式-适用N1/M1/N1s----附加转向灯提示音修改
  9. 黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署---b站视频跟学
  10. 英特尔核显无法为此计算机,win10intel显卡驱动装不上怎么办_Win10系统无法安装intel显卡驱动如何解决...