tcgetattr

tcgetattr函式用於獲取與終端相關的參數。參數fd為終端的檔案描述符,返回的結果保存在termios結構體中,該結構體一般包括如下的成員:

頭檔案

#include<Termios.h>

函式原型

int tcgetattr(int fd, struct termios *termios_p);

說明

tcgetattr函式用於獲取與終端相關的參數。參數fd為終端的檔案描述符,返回的結果保存在termios結構體中,該結構體一般包括如下的成員:
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t c_cc&#91;NCCS&#93;;
其具體意義如下。
c_iflag:輸入模式標誌,控制終端輸入方式,具體參數如表1所示。
表1 c_iflag參數表

鍵 值 說 明
IGNBRK 忽略BREAK鍵輸入
BRKINT 如果設定了IGNBRK,BREAK鍵輸入將被忽略
IGNPAR 忽略奇偶校驗錯誤
PARMRK 標識奇偶校驗錯誤
INPCK 允許輸入奇偶校驗
ISTRIP 去除字元的第8個比特
INLCR 將輸入的NL(換行)轉換成CR(回車)
IGNCR 忽略輸入的回車
ICRNL 將輸入的回車轉化成換行(如果IGNCR未設定的情況下)
IUCLC 將輸入的大寫字元轉換成小寫字元(非POSIX)
IXON 允許輸入時對XON/XOFF流進行控制
IXANY 輸入任何字元將重啟停止的輸出
IXOFF 允許輸入時對XON/XOFF流進行控制
IMAXBEL 當輸入佇列滿的時候開始響鈴
c_oflag:輸出模式標誌,控制終端輸出方式,具體參數如表2所示。
表2 c_oflag參數
鍵 值 說 明
OPOST 處理後輸出
OLCUC 將輸入的小寫字元轉換成大寫字元(非POSIX)
ONLCR 將輸入的NL(換行)轉換成CR(回車)及NL(換行)
OCRNL 將輸入的CR(回車)轉換成NL(換行)
ONOCR 第一行不輸出回車符
ONLRET 不輸出回車符
OFILL 傳送填充字元以延遲終端輸出
OFDEL 以ASCII碼的DEL作為填充字元,如果未設定該參數,填充字元為NUL
NLDLY 換行輸出延時,可以取NL0(不延遲)或NL1(延遲0.1s)
CRDLY 回車延遲,取值範圍為:CR0、CR1、CR2和 CR3
TABDLY 水平制表符輸出延遲,取值範圍為:TAB0、TAB1、TAB2和TAB3
BSDLY 空格輸出延遲,可以取BS0或BS1
VTDLY 垂直制表符輸出延遲,可以取VT0或VT1
FFDLY 換頁延遲,可以取FF0或FF1
c_cflag:控制模式標誌,指定終端硬體控制信息,具體參數如表3所示。
表3 c_cflag參數
鍵 值 說 明
CBAUD 波特率(4+1位)(非POSIX)
CBAUDEX 附加波特率(1位)(非POSIX)
CSize 字元長度,取值範圍為CS5、CS6、CS7或CS8
CSTOPB 設定兩個停止位
CREAD 使用接收器
PARENB 使用奇偶校驗
PARODD 對輸入使用奇偶校驗,對輸出使用偶校驗
HUPCL 關閉設備時掛起
CLOCAL 忽略數據機線路狀態
CRTSCTS 使用RTS/CTS流控制
c_lflag:本地模式標誌,控制終端編輯功能,具體參數如表4所示。
表4 c_lflag參數
鍵 值 說 明
ISIG 當輸入intr、QUIT、SUSP或DSUSP時,產生相應的信號
ICANON 使用標準輸入模式
XCASE 在ICANON和XCASE同時設定的情況下,終端只使用大寫。
ECHO 顯示輸入字元
ECHOE 如果ICANON同時設定,ERASE將刪除輸入的字元
ECHOK 如果ICANON同時設定,KILL將刪除當前行
ECHONL 如果ICANON同時設定,即使ECHO沒有設定依然顯示換行符
ECHOPRT 如果ECHO和ICANON同時設定,將刪除列印出的字元(非POSIX)
TOSTOP 向後台輸出傳送SIGTTOU信號
c_cc&#91;NCCS&#93;:控制字元,用於保存終端驅動程式中的特殊字元,如輸入結束符等。c_cc中定義了如表5所示的控制字元。
表5 c_cc支持的控制字元
說 明 說 明
VINTR Interrupt字元 VEOL 附加的End-of-file字元
VQUIT Quit字元 VTIME 非規範模式讀取時的逾時時間
VERASE Erase字元 VSTOP Stop字元
VKILL Kill字元 VSTART Start字元
VEOF End-of-file字元 VSUSP Suspend字元
VMIN 非規範模式讀取時的最小字元數 &#8203; &#8203;
tcsetattr函式用於設定終端的相關參數。參數fd為打開的終端檔案描述符,參數optional_actions用於控制修改起作用的時間,而結構體termios_p中保存了要修改的參數。
optional_actions可以取如下的值:
TCSANOW:不等數據傳輸完畢就立即改變屬性。
TCSADRAIN:等待所有數據傳輸結束才改變屬性。
TCSAFLUSH:清空輸入輸出緩衝區才改變屬性。
錯誤信息:
EBADF:非法的檔案描述符。
EINTR:tcsetattr函式調用被信號中斷。
EINVAL:參數optional_actions使用了非法值,或參數termios中使用了非法值。
ENCTTY:非終端的檔案描述符。

範例

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>
int main(void){
//term用於存儲獲得的終端參數信息
struct termios term;
int err;
//獲得標準輸入的終端參數,將獲得的信息保存在term變數中
if(tcgetattr(STDIN_FILENO,&term)==-1){
perror("Cannot get standard input description");
return 1;
}
//修改獲得的終端信息的結束控制字元
term.c_cc&#91;VEOF&#93;=(cc_t)0x07;
//使用tcsetattr函式將修改後的終端參數設定到標準輸入中
//err用於保存函式調用後的結果
err=tcsetattr(STDIN_FILENO,TCSAFLUSH,&term);
//如果err為-1或是出現EINTR錯誤(函式執行被信號中斷),
//給出相關出錯信息
if(err==-1 && err==EINTR){
perror("Failed to change EOF character");
return 1;
}
return 0;
}
用gcc編譯程式,得到可執行程式。在執行程式前,按“Ctrl+D”可以使終端結束。執行程式後,按“Ctrl+D”失去了作用,而輸入“Ctrl+G”實現了原來“Ctrl+D”的功能。

相關詞條

相關搜尋

熱門詞條

聯絡我們