ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 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 核心修改.