Linux termios 结构体注解

1. 结构体定义

该结构体定义在头文件 <termios.h> 中,至少包含以下成员:

1
2
3
4
5
tcflag_t c_iflag;      /* input modes */
tcflag_t c_oflag;      /* output modes */
tcflag_t c_cflag;      /* control modes */
tcflag_t c_lflag;      /* local modes */
cc_t     c_cc[NCCS];   /* special characters */

2. 结构体成员注解

2.1. 输入模式标志 c_iflag

c_iflag 用于设置终端 I/O 的输入参数,标志宏定义如下:

  • IGNBRK
    忽略输入时的中断(BREAK)条件

  • BRKINT

    1. 如果设置了 IGNBRK ,则忽略中断;
    2. 如果没有设置 IGNBRK ,但设置了 BRKINT ,那么中断(BREAK)会导致输入输出队列被冲洗(flush);如果终端是前台进程组,中断(BREAK)将会向该终端发送 SIGINT 信号;
    3. 如果 IGNBRKBRKINT 都未设置,中断(BREAK)字符将被读取为空字节(’\0’);如果设置了 PARMAR 标志,那么它将被读取为序列 \377 \0 \0
  • IGNPAR
    忽略帧错误和校验错误

  • PARMRK
    (待补充)

  • INPCK
    使能输入奇偶校验

  • ISTRIP
    有效输入字节被剥离为 7 位

  • INLCR
    将输入的 NL 转换为 CR

  • IGNCR
    忽略输入时的 CR

  • ICRNL
    将输入的 CR 转换为 NL (除非设置了 IGNCR

  • IUCLC
    (不属于 POSIX)在输入时将大写字符转换成小写

  • IXON
    在输出上使能 XON/XOFF 流控制

  • IXANY
    输入任何字符都将重启停止的输出

  • IXOFF 在输入上使能 XON/XOFF 流控制

  • IMAXBEL
    (不属于 POSIX)输入队列已满时响铃;Linux 没有实现该标志位

  • IUTF8
    (不属于 POSIX)输入为 UTF8 字符

2.2. 输出模式标志 c_oflag

c_oflag 用于设置终端 I/O 的输出参数,标志宏定义如下:

  • OPOST
    使能实现定义(implementation-defined)的输出处理(?)

  • OLCUC
    (不属于 POSIX)在输出时将大写字符转换成小写

  • ONLCR
    在输出时将 NL 转换成 CR-NL

  • OCRNL
    在输出时将 CR 转换成 NL

  • ONOCR
    不在第 0 列输出 CR

  • ONLRET
    不输出 CR

  • OFILL
    以发送填充字符代替使用定时进行延时

  • OFDEL
    填充字符设为 ASCII DEL (0177),如果未设置,则为 ASCII NULL (’\0’);Linux 没有实现该标志位

  • NLDLY
    (待补充)

  • CRDLY
    (待补充)

  • TABDLY
    (待补充)

  • BSDLY
    (待补充)

  • VTDLY
    (待补充)

  • FFDLY
    (待补充)

2.3. 控制模式标志 c_cflag

c_cflag 用于设置终端 I/O 的控制参数,标志宏定义如下:

  • CBAUD
    (不属于 POSIX)波特率掩码( 4 + 1 位)。[要求 _BSD_SOURCE_SVID_SOURCE]

  • CBAUDEX
    (不属于 POSIX)额外的波特率掩码( 1 位),包含在 CBAUD 中。 [要求 _BSD_SOURCE_SVID_SOURCE]

  • CSIZE
    字符大小掩码,值为 CS5CS6CS7CS8

  • CSTOPB
    将停止位设为 2 位,如果未设置,则为 1 位

  • CREAD
    启用接收器

  • PARENB 使能对输出的奇偶校验生成和对输入的奇偶校验检查

  • PARODD
    使能奇校验,如果未设置,则为偶校验

  • HUPCL
    (待补充)

  • CLOCAL
    忽略解制解调器状态行

  • LOBLK
    (待补充)

  • CIBAUD
    (不属于 POSIX)输入波特率掩码

  • CMSPAR
    (不属于 POSIX)(待补充)

  • CRTSCTS
    (不属于 POSIX)启用硬件 RTS/CTS 流控制

2.4. 本地模式标志 c_lflag

c_lflag 用于设置终端 I/O 的本地参数,标志宏定义如下:

  • ISIG
    当接收到 INTRQUITSUSPDSUSP 字符时,产生相应的信号

  • ICANON
    使能规范模式

  • XCASE
    (不属于 POSIX)(待补充)

  • ECHO
    使能回显

  • ECHOE
    如果设置了 ICANON,则 ERASE 字符将可视地擦除字符

  • ECHOK
    如果设置了 ICANON,则 KILL 字符将可视地擦除当前行

  • ECHONL
    如果设置了 ICANON,则回显 NL 字符( ECHO 是否设置都有效 )

  • ECHOCTL
    (不属于 POSIX)如果设置了 ECHO,则除 TABNLSTARTSTOP 外的特殊终端字符,都回显为 ^X,例如 0x08 (BS) 将回显为 ^H

  • ECHOPRT
    如果设置了 ICANONECHO,则 ERASE 字符使所有正被擦除的字符按它们被擦除的方式打印

  • ECHOKE
    如果设置了 ICANON,则按照 ECHOEECHOPRT 指定的方式来回显行中的每个字符

  • DEFECHO
    (不属于 POSIX)仅在进程正在读取时回显;Linux 没有实现该标志位

  • FLUSHO
    (不属于 POSIX)(待补充)

  • NOFLSH
    (不属于 POSIX)(待补充)

  • TOSTOP
    (待补充)

  • PENDIN
    (不属于 POSIX)(待补充)

  • IEXTEN
    (不属于 POSIX)(待补充)

2.5. 终端特殊字符定义数组 c_cc

  • VDISCARD
  • VDSUSP
  • VEOF
  • VEOL
  • VEOL2
  • VERASE
  • VINTR
  • VKILL
  • VLNEXT
  • VMIN
  • VQUIT
  • VPEPRINT
  • VSTART
  • VSTATUS
  • VSTOP
  • VSUSP
  • VSWTCH
  • VTIME
  • VMERASE
本博客所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!
最后更新于 2023/06/21 14:42 CST
使用 Hugo 构建
主题 StackJimmy 设计