終端I O之獲得和設定終端屬性

2021-09-06 14:04:35 字數 872 閱讀 3680

使用函式tcgetattr和tcsetattr可以獲得或設定termios結構。這樣也可以檢測和修改各種終端選擇標誌和特殊字元,以使終端按我們所希望的方式程序操作。

#include

int tcgetattr(int filedes, struct termios *termptr);

int tcsetattr(int filedes, int opt, const struct termios *termptr);

兩個函式的返回值:若成功則返回0,若出錯則返回-1

這兩個函式都有乙個指向termios結構的指標作為其引數,它們返回當前終端的屬性,或者設定該終端的屬性。因為這兩個函式只對終端裝置進行操作,所以若filedes並不引用乙個終端裝置則出錯返回-1,errno設定為enotty。

tcsetattr的引數opt是我們可以指定在什麼時候新的終端屬性才起作用。opt可以指定為下列常量中的乙個:

tcsanow更改立即發生。

tcsadrain傳送了所有輸出後更改才發生。若更改輸出引數則應該使用此選項。

tcsaflush傳送了所有輸出後更改才發生。更進一步,在更改發生時未讀的所有輸入資料都被刪除(刷清)。

tcsetattr函式的返回值易產生混淆。如果它執行了任意一種所要求的動作,即使未能執行所有要求的動作,它也返回0(表示成功)。如果該函式返回0,則我們有責任檢查該函式是否執行了所有要求的動作。這就意味著,在呼叫tcsetattr設定所希望的屬性後,需呼叫tcgetattr,然後將實際終端屬性與所希望的屬性相比較,以檢測兩者是否有區別。

終端I O之終端選項標誌

中的表18 1至表18 4中列出的所有選項標誌 除遮蔽標誌外 都用一位或幾位 設定或清除 表示,而遮蔽標誌則定義多位,它們組合在一起,於是可以定義多個值。遮蔽位有乙個定義名,每個值也有乙個名字。例如,為了設定字元長度,首先用字元長度遮蔽標誌csize將表示字元長度的位清0,然後設定下列值之一 cs5...

終端I O之終端選項標誌

中的表18 1至表18 4中列出的所有選項標誌 除遮蔽標誌外 都用一位或幾位 設定或清除 表示,而遮蔽標誌則定義多位,它們組合在一起,於是可以定義多個值。遮蔽位有乙個定義名,每個值也有乙個名字。例如,為了設定字元長度,首先用字元長度遮蔽標誌csize將表示字元長度的位清0,然後設定下列值之一 cs5...

終端I O之終端視窗的大小

大多數unix系統都提供了一種功能,可以對當前終端視窗的大小進行跟蹤,在視窗大小發生變化時,使核心通知前台程序組。核心為每個終端和偽終端儲存乙個winsize結構 struct winsize unsigned short ws row rows,in character unsigned shor...