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 ,并使用为回车符指定的延迟。 如果既未设置 ONLCR, OCRNL, ONOCR,也未设置 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 文件包含用于 TCSCSMAP 和 TCGCSMAP 操作的结构。
- TCGSMAP
- 返回结构参数所引用的结构中的当前代码集映射的副本。 /usr/include/sys/tty.h 文件包含用于 TCSCSMAP 和 TCGCSMAP 操作的结构。
以下 ioctl 操作用于受信任通信路径操作:
- TCSAK
- 指向一个整数,该整数启用安全注意键 (SAK) 序列 (Ctrl-X , Ctrl-R) 以提供只有可信进程才能读取或写入的干净终端。 启用 SAK 并且用户输入此序列时,当前正在运行的所有进程都将结束。 TCSAKON 操作会打开 SAK 序列; TCSKKOFF 操作会关闭 SAK 序列。
- TCQSAK
- 查询 SAK 序列中的状态 (TCSAKON 或 TCSKKOFF)。
- TCTROT
- 设置另一个进程可以用来查询 (使用 TCQTRUST 操作) 终端的状态 (TCTRUSTED 或 TCUNTRUSTED) 的位。
- TCQTRUST
- 查询该终端的状态 (TCTRUSTED 或 TCUNTRUSTED)。