每個字符設備都對應一個tty_struct數據結構,主要用來保存終端設備當前參數設置、所屬的前臺進程組ID和字符IO緩衝隊列等信息。Linux內核使用了數組tty_table[]來保存系統中每個終端設備的信息。
// tty數據結構。
struct tty_struct {
struct termios termios; // 終端io屬性和控制字符數據結構。
int pgrp; // 所屬進程組。
int session; // 會話號。
int stopped; // 停止標誌。
void (*write)(struct tty_struct * tty); // tty寫函數指針。
struct tty_queue *read_q; // tty讀隊列。
struct tty_queue *write_q; // tty寫隊列。
struct tty_queue *secondary; // tty輔助隊列(存放規範模式字符序列),
}; //可稱爲規範(熟)模式隊列。
// tty字符緩衝隊列數據結構。用於tty_struc結構中的讀、寫和輔助(規範)緩衝隊列。
struct tty_queue {
unsigned long data; // 隊列緩衝區中含有字符行數值(不是當前字符數)。
// 對於串口終端,則存放串行端口地址。
unsigned long head; // 緩衝區中數據頭指針。
unsigned long tail; // 緩衝區中數據尾指針。
struct task_struct * proc_list; //等待本隊列的進程列表。
char buf[TTY_BUF_SIZE]; // 隊列的緩衝區。
};