Linux下C编程:底层终端编程实例
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