sgtty.h 文件

用途

为 Berkeley 线路规程提供终端接口。

描述

sgtty.h 文件定义适用于终端文件的 ioctl 子例程所使用的结构。 提供此文件中的结构,定义和值是为了与用于异步通信的 Berkeley 用户界面兼容。 窗口和终端大小操作使用 winsize 结构,此结构在 ioctl.h 文件中定义。 温斯 结构和使用它的 ioctl 函数在 tty 子系统概述 常规编程概念: 编写和调试营销计划中进行了描述。

注: 4 支持 Berkeley 行规程以兼容较旧的应用程序。 但是,强烈建议使用符合 POSIX 的行规程, termios.h 文件中描述了该接口。

基本 sgtty.h 方式

基本 ioctl 函数使用 sgtty.h 文件中定义的 sgttyb 结构。 该结构包含以下字段:

sg_ispeed
指定该设备的输入速度。 对于任何特定硬件,将忽略不可能的速度更改。 表中的符号值在 sgtty.h 文件中定义。
B0
挂了 使用零波特率来挂断连接。 如果指定了 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 波特
扩展
外部 A
扩展
外部 B。
sg_ospeed
指定该设备的输出速度。 请参阅以下内容的描述:sg_ispeed。 该sg_ospeed字段具有的值与sg_ispeed
sg_erase
指定擦除字符。 (缺省值为 Backspace。)
sg_kill
指定终止字符。 (缺省值为 Ctrl-U。)
sg_flags
指定系统处理输出的方式。 初始输出控制值都是清除的位。 可能的输出方式为:
所有延迟
延迟算法选择。
BSDELAY
选择退格延迟。 当前忽略退格延迟。 可能的值为 BS0 或 BS1。
VTTDELAY
选择换页和垂直选项卡延迟:
FF0
指定无延迟。
FF1
2 一个大约 2 秒的延迟。
CRDELAY
选择回车延迟 (S):
CR0
指定无延迟。
CR1
指定一个延迟。 延迟大约持续 0.08 秒。
CR2
指定一个延迟。 延迟大约持续 0.16 秒。
CR3
指定一个延迟。 在 9600 波特时,延迟垫线至少为 9 个字符。
待定延迟
选择选项卡延迟:
TAB0
指定无延迟。
TAB1
指定一个延迟。 延迟取决于移动的量。
TAB2
指定一个延迟。 延迟持续约 0.10 秒。
XTABS
指定输出中的制表符将替换为适当的空格数。
延迟
选择新行的字符延迟。 这是在与 NL0 和 NL1进行比较之前要使用的掩码。
NL0
指定无延迟。
NL1
指定一个延迟。 此延迟取决于当前列。
NL2
指定一个延迟。 延迟持续约 0.10 秒。

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

EVENP
允许对输入进行偶校验。

EVENPODDP 标志同时控制输入的奇偶性校验和输出的奇偶性校验生成 (除非启用了 LPASS8 位) ,处于 CKEIT 和 CBREAK 方式。 除非设置了 ODDP 标志并且清除了 EVENP 标志 (在此情况下将生成奇数奇偶性校验) ,否则将在输出时生成偶数奇偶性校验。 在 CABED 和 CBREAK 方式下,将忽略具有错误奇偶性校验 (由 EVENPODDP 标志确定) 的输入字符。

ODDP
允许对输入进行奇数奇偶校验。 请参阅对 EVENP 标志的描述。
原始
指示 RAW 方式,它在所有字符和 8 位接口上都提供了唤醒功能。

RAW 方式禁用除 LFLUSHO 位指定的输出清空之外的所有处理。 完整的 8 位输入在可用时立即给出; 所有 8 位都在输出时传递。 输入中的 break 条件报告为空字符。 如果在 RAW 方式下输入队列溢出,那么将废弃输入和输出队列中的所有数据; 这同时适用于新驱动程序和旧驱动程序。

CRMOD
将回车符映射到输入上的新行中,并输出新行作为回车符和换行符。
ECHO
Echo (全双工)。
LCase
在输入时将大写映射为小写,在大写终端时将小写映射为大写。
CBREAK
启用半熟模式。 程序可以在输入时读取每个字符,而不等待全行。 除输入编辑外,所有处理都已完成。 字符和字擦除,行杀,输入重印,以及反斜杠字符和 EOT 字符的特殊处理被禁用。
串联
启用自动流量控制 (TANDEM 方式) ,这将导致系统在输入队列有溢出的危险时生成停止字符 (Ctrl-S) ,并在输入队列已充分耗尽时生成开始字符 (Ctrl-Q)。 当终端实际上是另一台了解约定的计算机时,这种方式对于流量控制很有用。
注: 对于流控制的两个方向,使用相同的停止和开始字符。 由以下项指定的字符:t_stopc在输入时接受字段作为停止输出的字符,在输出时生成字段作为停止输入的字符。 由以下项指定的字符:t_startc在输入时接受字段作为重新启动输出的字符,并在输出时生成字段作为重新启动输入的字符。

基本 ioctl 操作

大量的 ioctl 命令适用于终端。 有些具有一般形式:

#include <sgtty.h>
ioctl(FileDescriptor, Code, Value)
struct sgttyb *Value;

代码 参数的适用值如下所示:

描述
TIOCGETP 访存与终端关联的基本参数,并将其存储在所指向的 斯格特蒂卜 结构中。
TIOCSETP 根据所指向的 斯格特蒂卜 结构来设置参数。 接口会延迟到输出停止,然后在更改方式之前抛出任何未读字符。
Tiocsetn TIOCSETP 值具有相同的效果,但不会延迟或刷新输入。 但是,在切换到 RAW 方式或从 RAW 方式更改时,不会保留输入。

对于以下代码, 参数将被忽略:

描述
TIOCEXCL 设置互斥使用方式; 在关闭文件之前,不允许再打开。
TIOCNXCL 关闭互斥-使用方式。
TIOCHPCL 当文件上次关闭时,将挂断终端。 当线路与用于发出出局呼叫的调制解调器关联时,这很有用。

对于以下代码而言, 参数是指向整数的指针。

描述
Tiocflush 如果 参数指向的整数具有零值,那么将清空在输入或输出队列中等待的所有字符。 否则,整数的值将应用于 fcntl.h 文件中定义的 FREAD 和 FWRITE 位。 如果设置了 FREAD 位,那么将清空输入队列中等待的所有字符。 如果设置了 FWRITE 位,那么将清空输出队列中等待的所有字符。
注: 除非设置了 内核 标志,否则不能使用 FREAD 和 FWRITE 位。

在以下代码中,除非另有指定 0 否则参数为 0:

描述
印度科技学院 参数指向已在终端上输入系统预显示的字符。
TIOCSBRK 在终端中设置了中断位。
TIOCCBRK 已清除中断位。
TIOCSDTR 已设置数据终端就绪。
TIOCCDTR 数据终端就绪已清除。
TIOCSTOP 输出停止,就像输入了停止字符一样。
TIOCSTART 输出将重新启动,就像输入了开始字符一样。
TIOCGPGRP 参数是一个指向整数的指针,该整数将放置在该终端作为其控制终端的进程组的进程组标识中。
TIOCSPGRP 参数是一个指向整数的指针,该整数是要将此终端的进程组标识设置为的值。
Tiocoutq 参数指向的整数为单位返回排队等待输出到终端的字符数。
操作 参数指向的整数形式返回从参数描述符中可立即读取的字符数。 此操作适用于文件,管道和终端。

大写终端

如果设置了 LCASE 输出方式位,那么所有大写字母都将映射到相应的小写字母。 可以通过在大写字母前面加上 \ (反斜杠) 来生成大写字母。 在输出大写字母时,将在其前面加上反斜杠。 此外,以下转义序列可以在输出时生成并在输入时接受:

对于 使用
` (严重) \'
| \!
~ \^
{ \(
} \)

要处理不了解 ~ (代字号) 已制成 ASCII 字符的终端,可以在本地方式字中设置 LTILDE 位。 如果设置了 LTILDE 位,那么 ~ (代字号) 字符将替换为输出中的 ` (严重) 字符。

特殊字符

与每个终端关联的 查尔斯 结构为旧终端接口和新终端接口指定特殊字符。 此结构在 ioctl.h 文件中定义, sgtty.h 文件包含 #include 语句。 查尔斯 结构中包含以下字段:

描述
t_intrc 中断字符 (缺省情况下为 Ctrl-C) 将生成 SIGINT 信号。 这是停止一个不再需要的进程或在一个交互式程序中重新获得控制权的正常方式。
t_quitc 退出字符 (缺省情况下为 Ctrl-\) 会生成 SIGQUIT 信号。 这用于结束程序,并在当前目录中的 核心 文件中生成核心映像 (如果可能)。
t_startc 开始-输出字符 (缺省情况下为 Ctrl-Q)。
t_stopc 停止-输出字符 (缺省情况下为 Ctrl-S)。
t_eofc 文件结束符 (缺省情况下,为 Ctrl-D)。
t_brkc 输入分隔符 (-1 (默认为逗号)。 此字符的作用类似于换行符,因为它结束一行,被回传并传递到程序。

停止字符和开始字符可以相同,以生成切换效果。 适用的 ioctl 函数为:

描述
TIOCGETC 获取特殊字符并将其放入指定的结构中。
TIOCSETC 将特殊字符设置为结构中给定的字符。

本地方式

与每个终端关联的是一个本地方式字。 本地方式字的位如下所示:

描述
LCRTBS 擦除时返回空格,而不是回传擦除。
LPRTERA 打印终端擦除方式。
LCRTERA 擦除字符回显为 Backspace-Space-Backspace。
LTILDE 在输出时将 ~ (代字号) 转换为 ` (grave) (对于无法将代字号识别为 ASCII 字符的终端)。
LMDMBUF 在承运方下降时停止并启动输出。
LLITOUT 禁止输出转换。
LTOSTOP 发送 SIGTTOU 信号以进行后台输出。
LFLUSHO 正在清空输出。
LNOHANG 当承运方下降时,请勿发送挂断。
LCRTKIL 退格-空间-退格以擦除行终止时的整行。
LPASS8 在输入时以任何方式传递所有 8 位。
LCTLECH 将输入控制字符回传为 Ctrl-X,删除为 Ctrl-?。
LPENDIN 在下一次读取或输入字符时重新输入暂挂的输入。
LDECCTQ 仅 Ctrl-Q 在 Ctrl-S 之后重新启动输出。
LNOFLSH 在输入中断字符时禁止清空暂挂 I/O。

以下 ioctl 函数在本地方式字结构上运行:

描述
TIOCLBIS 参数是一个指向整数的指针,该整数的值是包含要在本地方式字中设置的位的掩码。
TIOCLBIC 参数是一个指向整数的指针,该整数的值是包含要在本地方式字中清除的位的掩码。
设置终端输入输出类 参数是一个指向整数的指针,该整数的值存储在本地方式字中。
TIOCLGET 参数是一个指向整数的指针,当前本地方式字放置在该整数中。

本地特殊字符

与每个终端关联的 利查斯 结构为新的终端驱动程序定义控制字符。 该结构包含以下字段:

描述
t_suspc 暂挂进程字符 (缺省情况下为 Ctrl-Z)。 这将发送 SIGTSTP 信号以暂挂当前进程组。 在输入期间识别此字符。
t_dsuspc 延迟暂挂进程字符 (缺省情况下为 Ctrl-Y)。 这将发送 SIGTSTP 信号以暂挂当前进程组。 当进程尝试读取控制字符而不是输入该字符时,将识别该字符。
t_rprntc 重新打印行控制字符 (缺省情况下为 Ctrl-R)。 这将重新打印以换行符开头且未被读取的所有字符。
t_flushc 清空-输出字符 (缺省情况下为 Ctrl-O)。 这会清空已写入但未传输的数据。
t_werasc 单词擦除字符 (在缺省情况下为 Ctrl-W)。 这会擦除前面的单词。 这不会抹去行首之外的地方。
t_lnextc 下一个文字字符 (缺省情况下为 Ctrl-V)。 这将导致忽略下一个字符的特殊含义,以便可以输入字符而不被系统解释。

以下 ioctl 函数 (使用 利查斯 结构) 受终端接口支持,用于定义终端的本地特殊字符:

描述
TIOCSLTC 设置本地字符。 此函数的自变量是指向 利查斯 结构的指针,该结构定义了新的本地特殊字符。
TIOCGLTC 设置本地字符。 此函数的自变量是一个指向 利查斯 结构的指针,该结构中放置了当前本地特殊字符集。

在讨论 "tty 子系统概述"常规编程概念: 编写和调试营销计划中的 tty 公共代码时描述了 温斯 结构和使用它的 ioctl 功能。

文件

描述
/dev/tty 这是 特殊文件,它是控制终端的同义词。