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
查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm