termio.h 文件

用途

定义 泰尔米奥 文件的结构,该文件提供用于实现 2 兼容性的终端接口。

描述

/usr/include/sys/termio.h 文件包含 termio 结构,该结构定义特殊字符以及基本输入,输出,控制和行规程方式。 提供 termio.h 文件是为了与 V 2 应用程序兼容。

包含 termio.h 文件的 V 2 应用程序可以使用 POSIX 行规程提供的 V 2 终端接口。 POSIX 线路规程不支持以下版本 2 终端接口操作:

  • 终端页面调度 (TCGLEN ioctl 和 TCSLEN ioctl)
  • 终端日志记录 (TCLOG ioctl)
  • 增强的编辑线规程 (LDSETDT ioctl 和 LDGETDT ioctl)

termio.h 文件中的 termio 结构包含以下字段:

  • c_iflag
  • c_oflag
  • c_cflag
  • c_lflag
  • c_cc

字段描述

c_iflag
描述基本终端输入控件。 初始输入/控制值为所有位清除。 可能的输入方式为:
IGNBRK
忽略中断条件。 在异步串行数据传输的上下文中, 中断条件 定义为零值位序列,其持续时间超过发送 1 个字节所需的时间。 零值位的整个序列被解释为单个中断条件,即使它持续了相当于一个字节以上的时间量。 如果设置了 IGNBRK 标志,那么将忽略在输入上检测到的中断条件,这意味着该中断条件不会放在输入队列上,因此不会被任何进程读取。
BRKINT
中断中断条件下的信号。 如果未设置 IGNBRK 标志,并且设置了 BRKINT 标志,那么中断条件会清空输入和输出队列。 如果该终端是前台进程组的控制终端,那么中断条件会向该前台进程组生成单个 SIGINT 信号。 如果既未设置 IGNBRK 也未设置 BRKINT 标志,那么会将中断条件读取为单个 \0。 如果设置了 PARMRK 标志,那么会将中断条件读取为 \377 ,\0 和 \0。
IGNPAR
忽略带有奇偶错误的字符。 如果设置了此标志,那么将忽略具有帧或奇偶错误 (而不是中断) 的字节。
帕姆马克
标记奇偶错误。 如果设置了 PARMRK 标志并且未设置 IGNPAR 标志,那么会将带有帧或奇偶错误 (除中断之外) 的字节作为三个字符的序列 \377 , \0 , X提供给应用程序,其中 \377 , \0 是每个序列前面的两个字符的标志, X 是接收到的错误字符的数据。 为了避免在此情况下出现岐义,如果未设置 ISTRIP 标志,那么会将有效字符 \377 作为 \377 和 \377 提供给应用程序。 如果既未设置 IGNPAR 也未设置 PARMRK 标志,那么会将框架划分或奇偶性校验错误 (除中断之外) 作为单个字符 \0 提供给应用程序。
INPCK
启用输入奇偶性校验检查。 如果设置了此标志,那么将启用输入奇偶性校验检查。 如果未设置,那么将禁用输入奇偶性校验检查。 这允许在没有输入奇偶性校验错误的情况下生成输出奇偶性校验。
ISTRIP
除去字符。 如果设置了此标志,那么首先将有效输入字符删除为 7 位; 否则,将处理所有 8 位。
INLCR
在输入时,将换行符 (NL) 映射到回车符 (CR)。 如果设置了此标志,那么接收到的 NL 字符将转换为 CR 字符。
国际犹太人委员会
忽略 CR 字符。 如果设置了此标志,那么将忽略且不读取接收到的 CR 字符。
ICRNL
在输入时将 CR 字符映射到 NL 字符。 如果设置了 ICRNL 标志,但未设置 IGNCR 标志,那么会将接收到的 CR 字符转换为 NL 字符。
IUCLC
在输入时将大写映射到小写。 如果设置了此标志,那么会将接收到的大写,字母字符转换为相应的小写字符。
IXON
启用启动和停止输出控制。 如果设置了此标志,那么接收到的 STOP 字符将暂挂输出,接收到的 START 字符将重新启动输出。 如果设置了 IXON 标志,那么不会读取 START 和 STOP 字符,而仅执行流量控制功能。 如果未设置 IXON 标志,那么会读取 START 和 STOP 字符。
IXANY
启用任何字符以重新启动输出。 如果设置了此标志,那么任何输入字符都将重新启动已暂挂的输出。
IXOFF
启用启动/停止输入控制。 如果设置了此标志,那么系统将在输入队列几乎已满时发送 STOP 字符,并在读取足够的输入时发送 START 字符,使该队列几乎再次为空。
c_oflag
指定系统处理输出的方式。 初始输出控制值为 "all bits clear"。 可能的输出方式为:
OPOST
后处理输出。 如果设置了此标志,那么将按其余标志的指示对输出字符进行后处理; 否则,将在不更改的情况下传输字符。
OLUC
在输出中将小写映射到大写。 如果设置了此标志,那么将以相应的大写字符形式传输小写字母字符。 此函数通常与 IUCLC 输入方式一起使用。
ONLCR
在输出时将 NL 映射到 CR-NL。 如果设置了此标志,那么 NL 字符将作为 CR-NL 字符对进行传输。
OCRNL
在输出时将 CR 映射到 NL。 如果设置了此标志,那么 CR 字符将作为 NL 字符进行传输。
ONOCR
指示第 0 列 (第一个位置) 没有 CR 输出。 如果设置了此标志,那么在第 0 列 (第一个位置) 时不会发送 CR 字符。
ONLRET
NL 执行 CR 功能。 如果设置了此标志,那么会假定 NL 字符执行回车符功能。 将列指针设置为 0 ,并使用为回车符指定的延迟。 如果既未设置 ONLCROCRNLONOCR,也未设置 ONLRET 标志,那么将假定 NL 字符仅执行换行功能。 列指针将保持不变。 如果实际传输 CR 字符,那么列指针也会设置为 0。

延迟位指定当将某些字符发送到终端时,传输停止的时间长度以允许机械或其他移动。 实际的延迟取决于线路速度和系统负载。

OFILL
使用填充字符进行延迟。 如果设置了此标志,那么将发送填充字符以进行延迟而不是定时延迟。 这对于只需要最小延迟的高波特率终端很有用。
奥夫德尔
如果设置了此标志,那么填充字符为 DEL。 如果未设置此标志,那么填充字符为 NULL。
NLDLY
选择新行的字符延迟。 这是在与 NL0 和 NL1: 进行比较之前要使用的掩码
NL0
指定无延迟。
NL1
指定一个大约为 0.10 秒的延迟。 如果设置了 ONLRET 标志,那么将使用回车延迟而不是换行符延迟。 如果设置了 OFILL 标志,那么将传输两个填充字符。
CRDLY
选择回车延迟数。 这是在与 CR0, CR1, CR2和 CR3: 进行比较之前要使用的掩码
CR0
指定无延迟。
CR1
指定延迟从属于当前列位置。 如果设置了 OFILL 标志,那么将传输两个填充字符。
CR2
指定大约 0.10 秒的延迟。 如果设置了 OFILL 标志,那么此延迟将传输四个填充字符。
CR3
指定一个大约 0.15 秒的延迟。
表 DLY
选择水平选项卡延迟。 这是在与 TAB0, TAB1, TAB2和 TAB3进行比较之前要使用的掩码。 如果设置了 OFILL 标志,那么以下任何延迟 ( TAB3除外) 将传输两个填充字符:
TAB0
指定无延迟。
TAB1
指定延迟从属于当前列位置。 如果设置了 OFILL 标志,那么将传输两个填充字符。
TAB2
指定大约 0.10 秒的延迟。
TAB3
指定要将选项卡展开为空格。
BSDLY
选择退格延迟。 这是在与 BS0 和 BS1: 进行比较之前要使用的掩码
BS0
指定无延迟。
BS1
指定大约 0.05 秒的延迟。 如果设置了 OFILL 标志,那么此延迟将传输一个填充字符。
VTDLY
选择垂直选项卡延迟。 这是在与 VT0 和 VT1: 进行比较之前要使用的掩码
VT0
指定无延迟。
VT1
2 一个大约 2 秒的延迟。
FDLY
选择换页延迟数。 这是在与 FF0 和 FF1: 进行比较之前要使用的掩码
FF0
指定无延迟。
FF1
指定大约 2 秒的延迟。
c_cflag
描述了终端的硬件控制。 除基本控制方式外,此字段还使用以下控制字符:
CBAUD
指定波特率。 这些位指定了连接的波特率。 对于任何特定硬件,将忽略不可能的速度更改。
B0
指定用于挂断连接的 0 波特率。 如果指定了 B0 ,那么不会声明 "数据终端就绪" 信号。 因此,该线路通常是断开连接的。 此延迟传输两个填充字符。 通常,这会使线路断开连接。
B50
指定 50 波特。
B75
指定 75 波特。
B110
指定 110 波特。
B134
指定 134.5 波特。
B150
指定 150 波特。
B200
指定 200 波特。
B300
指定 300 波特。
B600
指定 600 波特。
B1200
指定 1200 波特。
B1800
指定 1800 波特。
B2400
指定 2400 波特。
B4800
指定 4800 波特。
B9600
指定 9600 波特。
B19200
指定 19,200 波特。
B38400
指定 38,400 波特。
扩展
指定外部 A。
扩展
指定外部 B。
CSIZE
指定字符大小。 这些位指定发送和接收操作的字符大小 (以位为单位)。 字符大小不包括奇偶性校验位 (如果使用了奇偶性校验位):
CS5
5 5 位
CS6
6 位
CS7
7 位
CS8
8 位
CSTOPB
指定停止位的数目。 如果设置了此标志,那么发送 2 个停止位; 否则,仅发送 1 个停止位。
CREAD
启用接收器。 如果设置了此标志,那么将启用接收方。 否则,不会接收到字符。
PARENB
启用奇偶性校验。 如果设置了此标志,那么将启用奇偶性校验生成和检测,并向每个字符添加奇偶性校验位。
PARODD
指定奇校验。 如果启用了奇偶性校验,那么 PARODD 标志指定奇数奇偶性校验 (如果已设置)。 如果启用了奇偶性校验并且未设置 PARODD 标志,那么甚至会使用奇偶性校验。
HUPCL
在上次关闭时挂断。 如果设置了此标志,那么当最后一个进程关闭线路或进程终止时 (当 "数据终端就绪" 信号断开时) ,该线路将断开连接。
本地
指定本地行。 如果设置了此标志,那么假定该线路具有本地直接连接,并且没有调制解调器控制。 如果未设置,那么将采用调制解调器控制 (拨号连接)。
c_lflag
控制各种终端功能。 打开后的初始值是 "所有位都清除"。 此字段使用以下掩码名称符号:
ISIG
启用信号。 如果设置了此标志,那么将针对 INTR 和 QUIT 特殊控制字符检查每个输入字符。 如果输入字符与其中一个控制字符匹配,那么将执行与该字符关联的功能。 如果未设置 ISIG 函数,那么将不执行检查。
ICANON
启用规范输入。 如果设置了此标志,那么它将开启规范处理,这将启用擦除和终止编辑功能,并将输入字符组合成由 NL , EOF 和 EOL 字符分隔的行。 如果未设置 ICANON 标志,那么将直接从输入队列中满足读请求。 在此情况下,在满足下列其中一个条件之后,才会满足读请求:
  • 将接收到 最小 值指定的最小字符数。
  • 自接收到最后一个字符以来,由 时间 值指定的超时值已到期。

因此,可以读取输入的脉冲串,同时仍然允许单字符输入。 最小时间 值分别存储在 EOF 字符和 EOL 字符的位置中。 最小时间 的字符值将转换为它们的 ascii 等价值以获取数字值。 时间值表示十分之几秒。

XCASE
启用规范的大写和小写表示。 如果此标志与 ICANON 标志一起设置,那么在输入时将接受大写字母 (或通过 IUCLC 输入方式转换为小写的大写字母) ,方法是在其前面加上 \ (反斜杠) 字符。 然后,还会在输出前面添加反斜杠字符。 在此方式下,输出将生成并输入接受以下转义序列:
对于: 使用:
` (坟墓) \ `
| \ !
~ \ ^
{ \ (
} \ )
\ \ \

例如, A 是输入为\a, \n 作为\\n,并且 \n 为\\\n.

NOFLSH
禁用队列清空。 如果设置了此标志,那么不会对与 INTR 和 QUIT 字符关联的输入和输出队列执行正常清空。
ECHO
启用回传。 如果设置了此标志,那么将在接收到字符时回传这些字符。

如果设置了 ICANON 标志,那么可以使用以下回传功能:

回声
将擦除字符回传为 Backspace-Space-Backspace。 如果同时设置了 欧共体人道处ECHOE 标志,那么 ERASE 字符将回传为一个或多个 ASCII Backspace-Space-Backspace 序列,这将从屏幕中清除最后一个字符。
ECHOK
在杀死后回显 NL 字符。 如果设置了 ECHOK 标志,那么在接收到终止字符后,将回传 NL 字符。 这强调删除了该行。
ECHONL
回送 NL 字符。 如果设置了 ECHONL 标志,那么即使未设置 欧共体人道处 标志,也将回传 NL 字符。 对于设置为 "本地回传" (也称为 "半双工") 的终端而言,这很有用。
c_cc
指定用于定义特殊控制字符的数组。 每个函数的相对位置和初始值如下所示:
VINTR
对 INTR 特殊字符 (Ctrl-c) 建立索引,如果设置了 ISIG 标志,那么将在输入时识别该特殊字符。 INTR 字符生成 SIGINT 信号,该信号被发送到前台进程组中的所有进程,该终端是该前台进程组的控制终端。 如果设置了 ISIG 标志,那么在处理时将废弃 INTR 字符。
VQUIT
对 QUIT 特殊字符 (Ctrl-\) 建立索引,如果设置了 ISIG 标志,那么将在输入时识别该字符。 QUIT 字符生成 SIGQUIT 信号,该信号将发送到前台进程组中以终端为控制终端的所有进程,并将 核心 图像文件写入到当前工作目录中。 如果设置了 ISIG 标志,那么在处理时将废弃 QUIT 字符。
维 ERASE
对 ERASE 特殊字符 (Backspace) 建立索引,如果设置了 ICANON 标志,那么将在输入时识别该字符。 ERASE 字符不会擦除超出由 NL , EOL , EOF 或 EOL2 字符定界的行的开头部分。 如果设置了 ICANON 标志,那么处理时将废弃 ERASE 字符。
VKILL
对 KILL 特殊字符 (Ctrl-u) 建立索引,如果设置了 ICANON 标志,那么将在输入时识别该字符。 KILL 字符将删除整行 (以 NL , EOL , EOF 或 EOL2 字符定界)。 如果设置了 ICANON 标志,那么处理时将废弃 KILL 字符。
VEOF
对 EOF 特殊字符 (Ctrl-d) 建立索引,如果设置了 ICANON 标志,那么将在输入时识别该特殊字符。 当接收到 EOF 时,所有等待读取的字符将立即传递到进程中,而不等待新行,并且将废弃 EOF。 如果在一行的开头接收到 EOF (没有正在等待的字符) ,那么将从读取返回零的字符计数,表示文件结束。 如果设置了 ICANON 标志,那么在处理时将废弃 EOF 字符。
维奥尔
对 EOL 特殊字符 (Ctrl-@ 或 ASCII NULL) 建立索引,如果设置了 ICANON 标志,那么将在输入时识别该字符。 EOL 是额外的行定界符 (例如 NL) ,通常不使用。
VEOL2
对 EOL2 特殊字符 (Ctrl-@ 或 ASCII NULL) 建立索引,如果设置了 ICANON 标志,那么将在输入时识别此特殊字符。 EOL2 是另一个附加行定界符 (例如 NL) ,通常不使用。
VMIN
最小 值建立索引,该值不是特殊字符。 在 "POSIX (termios.h 文件) 行规程"常规编程概念: 编写和调试程序中的 非规范方式输入处理 讨论中描述了 最小 值的使用。
VTIME
对 TIME 值建立索引,该值不是特殊字符。 在 "POSIX (termios.h 文件) 行规程"常规编程概念: 编写和调试程序中的 非规范方式输入处理 讨论中描述了 TIME 值的使用。
下列控制字符的字符值可以更改:
  • intr
  • ERASE
  • EOF
  • EOL2
  • QUIT
  • KILL
  • EOL

ERASE , KILL 和 EOF 字符也可以进行转义 (前面加上反斜杠) ,这样就不会执行特殊处理。

主 ioctl 子例程具有以下格式:

ioctl (FileDescriptor, Command, Structure)
struct termio *Structure;

使用此表单的操作包括:

TCGETA
获取与终端关联的参数,并将其存储在 结构 参数引用的 泰尔米奥 结构中。
TCSETA
结构 参数所引用的结构中设置与终端相关联的参数。 立即进行更改。
TCSETAF
请等待输出耗尽,然后清空输入队列并设置新参数。
TCSETAW
在设置新参数之前,等待输出漏出。 更改将影响输出的参数时应使用此表单。

其他 ioctl 子例程具有以下格式:

ioctl (FileDescriptor, Command, Value)
int Value;
使用此表单的操作包括:
注: 如果用户编写的应用程序在关闭端口之前执行 TCSBRK 操作,然后执行 TCFLSH 操作,那么 64 端口适配器上集中器框中剩余的最后一个数据将丢失。 但是,如果使用 SIO , 8 端口或 16 端口适配器,那么不会发生任何问题。
TCSBRK
等待输出被放弃。 如果 Value 参数的值为 0 ,那么它将发送 0.25 秒的中断。 非零值会导致中断条件达到该时间 (以毫秒计)。
TCS中断
等待输出被放弃。 如果 参数的值为 0 ,那么它将发送中断 .25 秒的消息。 非零值会导致中断条件达到该时间 (以毫秒计)。
TCXONC
启动和停止控制。 如果 参数的值为 0 ,那么它将暂挂输出。 如果 参数的值为 1 ,那么它将重新启动暂挂的输出。 如果 参数的值为 2 ,那么它将阻止输入。 如果 参数的值为 3 ,那么它将取消阻止输入。
TCFLSH
如果 参数的值为 0 ,那么它将清空输入队列。 如果 参数的值为 1 ,那么它将清空输出队列。 如果 参数的值为 2 ,那么它将同时清空输入队列和输出队列。

ioctl 子例程的另一种形式是:

ioctl (FileDescriptor, Command, Structure)
struct csmap* Structure;
TCSCSMAP
从结构参数所引用的结构中设置代码集映射,并拒绝任何无效映射 (长度/宽度为 0 或长度大于 MB_LEN_MAX的任何映射)。 /usr/include/sys/tty.h 文件包含用于 TCSCSMAPTCGCSMAP 操作的结构。
TCGSMAP
返回结构参数所引用的结构中的当前代码集映射的副本。 /usr/include/sys/tty.h 文件包含用于 TCSCSMAPTCGCSMAP 操作的结构。

以下 ioctl 操作用于受信任通信路径操作:

TCSAK
指向一个整数,该整数启用安全注意键 (SAK) 序列 (Ctrl-X , Ctrl-R) 以提供只有可信进程才能读取或写入的干净终端。 启用 SAK 并且用户输入此序列时,当前正在运行的所有进程都将结束。 TCSAKON 操作会打开 SAK 序列; TCSKKOFF 操作会关闭 SAK 序列。
TCQSAK
查询 SAK 序列中的状态 (TCSAKONTCSKKOFF)。
TCTROT
设置另一个进程可以用来查询 (使用 TCQTRUST 操作) 终端的状态 (TCTRUSTEDTCUNTRUSTED) 的位。
TCQTRUST
查询该终端的状态 (TCTRUSTEDTCUNTRUSTED)。