Linux 系統的終端處理是一個非常大的系統,需要處理許多不同類型的設備和需求。涉及的內容包括:調制解調器、終端仿真、偽終端等。
Linux 系統處理終端的方法是通過串行接口連接的控制台與系統通信並運行程序。由於越來越多的廠商都參與到終端的生產,而且每個廠商都為自己的終端設計自己的命令集,所以需要有一種方法對終端的訪問進行一般化處理。Linux 系統使用一個能力數據庫terminfo來描述每個終端的能力以及調用這些功能的方法。
在某些情況下,程序員希望能夠對某些並不是終端的設備提供終端驅動程序功能,這時需要用到偽終端。偽終端提供一種方法,讓程序員假裝成為一個真正的終端,並能夠良好地與系統交互。
下面程序的功能是查詢和打印當前終端的一些能力
- #include <stdlib.h>
- #include <stdio.h>
- #include <term.h>
- #include <curses.h>
- #define NUMCAPS 3
-
- int main()
- {
- int j;
- int retval = 0;
- char * buf;
- char *boolcaps[NUMCAPS] = {"am","bce","km"};
- char *numcaps[NUMCAPS] = {"cols","lines","colors"};
- char *strcaps[NUMCAPS] = {"cup","flash","hpa"};
-
- if(setupterm(NULL,fileno(stdin),NULL) != OK){
- perror("setupterm()");
- exit(EXIT_FAILURE);
- }
-
- for(j = 0;j<NUMCAPS;++j){
- retval = tigetflag(boolcaps[j]);
- if(retval == FALSE)
- printf("%s unsuported\n",boolcaps[j]);
- else
- printf("%s suported\n",boolcaps[j]);
-
- }
-
-
- for(j = 0;j<NUMCAPS;++j){
- retval = tigetnum(numcaps[j]);
- if(retval == ERR)
- printf("%s unspported\n",numcaps[j]);
- else
- printf("%s is%d\n",numcaps[j],retval);
-
- }
-
-
- for(j = 0;j<NUMCAPS;++j){
- buf = tigetstr(strcaps[j]);
- if(buf == NULL)
- printf("%s unspported\n",strcaps[j]);
- else
- printf("%s is%d\n",strcaps[j],buf[0]);
-
- }
-
- }
注意:編譯此程序時要手動連接libcurses.a,編譯方式為gcc test.c -o test -lcurses