tcgetattr是一個函式,用來獲取終端參數,成功返回零;失敗返回非零,發生失敗接口將設定errno錯誤標識。
相關函式:tcsetattr用來設定終端參數。
基本介紹
- 中文名:tcgetattr
- 頭檔案:#include<termios.h>
- 函式原型:int tcgetattr(int fd,
- 返回值:成功返回零;失敗返回非零
頭檔案,函式原型,說明,範例,
頭檔案
#include<termios.h>
函式原型
int tcgetattr(int fd, struct termios *termios_p);
說明
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t c_cc[NCCS];
其具體意義如下。
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參數
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信號 |
表5 c_cc支持的控制字元
宏 | 說 明 | 宏 | 說 明 |
VINTR | Interrupt字元 | VEOL | 附加的End-of-file字元 |
VQUIT | Quit字元 | 非規範模式讀取時的逾時時間 | |
VERASE | Erase字元 | VSTOP | Stop字元 |
VKILL | Kill字元 | VSTART | Start字元 |
VEOF | End-of-file字元 | VSUSP | Suspend字元 |
VMIN | 非規範模式讀取時的最小字元數 |
tcsetattr函式用於設定終端的相關參數。參數fd為打開的終端檔案描述符,參數optional_actions用於控制修改起作用的時間,而結構體termios_p中保存了要修改的參數。
optional_actions可以取如下的值:
TCSANOW:不等數據傳輸完畢就立即改變屬性。
TCSADRAIN:等待所有數據傳輸結束才改變屬性。
TCSAFLUSH:清空輸入輸出緩衝區才改變屬性。
錯誤信息:
EBADF:非法的檔案描述符。
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[VEOF]=(cc_t)0x07;
//使用tcsetattr函式將修改後的終端參數設定到標準輸入中