## 18.8. tty_struct 结构的细节
tty_struct 变量被 tty 核心用来保持当前的特定 tty 端口的状态. 几乎它的所有的朋友都只被 tty 核心使用, 有几个例外. 一个 tty 驱动可以使用的成员在此描述:
unsigned long flags;
tty 设备的当前状态. 这是一个位段变量, 并且通过下面的宏定义存取:
TTY_THROTTLED
当驱动以及有抑制函数被调用. 不应当被一个 tty 驱动设置, 只有 tty 核心.
TTY_IO_ERROR
由驱动设置当它不想任何数据被读出或写入驱动. 如果一个用户程序试图做这个, 它接收一个 -EIO 错误从内核中. 这常常在设备被关闭时设置.
TTY_OTHER_CLOSED
只由 pty 驱动使用来通知, 当端口已经被关闭.
TTY_EXCLUSIVE
由 tty 核心设置来指示一个端口在独占模式并且只能一次由一个用户存取.
TTY_DEBUG
内核中任何地方都不用.
TTY_DO_WRITE_WAKEUP
如果被设置, 线路规程的 write_wakeup 函数被允许来被调用. 常常在 tty_driver 调用 wake_up_interruptible 函数的同一时间被调用.
TTY_PUSH
只被缺省的 tty 线路规程内部使用.
TTY_CLOSING
tty 核心用来跟踪是否一个端口在那个时刻及时处于关闭过程.
TTY_DONT_FLIP
被缺省的 tty 线路规程用来通知 tty 核心, 它不应当改变 flip 缓冲, 当它被置位.
TTY_HW_COOK_OUT
如果被一个 tty 驱动设置, 它通知线路规程应当"烹调"发送给它的输出. 如果它没有设置, 线路规程成块拷贝驱动的输出; 否则, 它不得不为线路改变将单个发送的字节逐个求值. 这个标志应当通常不被 tty 驱动设置.
TTY_HW_COOK_IN
几乎和设置在驱动中的 flag 变量中的 TTY_DRIVER_REAL_RAW 标志一致. 这个标志通常应当不被 tty 驱动设置.
TTY_PTY_LOCK
pty 驱动用来加锁和解锁一个端口.
TTY_NO_WRITE_SPLIT
如果设置, tty 核心不将对 tty 驱动的写分成正常大小的块. 这个值不应当用来阻止对 tty 端口通过发送大量数据到端口的DoS攻击,
struct tty_flip_buffer flip;
给 tty 设备的 flip 缓冲.
struct tty_ldisc ldisc;
给 tty 设备的线路规程.
wait_queue_head_t write_wait;
给 tty 写函数的 wait_queue. 一个 tty 驱动应当唤醒它,当它可以接收更多数据时.
struct termios *termios;
指向 tty 设备的当前 termios 设置的指针.
unsigned char stopped:1;
指示是否 tty 设备被停止. tty 驱动可以设置这个值.
unsigned char hw_stopped:1;
指示是否 tty 设备的已经被停止. tty 驱动可以设置这个值.
unsigned char low_latency:1;
指示是否 tty 设备是一个低反应周期的设备, 能够高速接收数据. tty 驱动可以设置这个值.
unsigned char closing:1;
指示是否 tty 设备在关闭端口当中. tty 驱动可以设置这个值.
struct tty_driver driver;
当前控制这个 tty 设备的 tty_driver 结构.
void *driver_data;
指针, tty_driver 可以用来存储对于 tty 驱动本地的数据. 这个变量不被 tty 核心修改.