网站大量收购独家精品文档,联系QQ:2885784924

Linux终端(三).doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux终端(三) Linux终端(三)Linux终端(三) 终端输出 使用termios结构,我们可以控制键盘输入,但是如果在显示在屏幕上的输出上可以进行同样级别的控制也许会更好。在我们本章的开始,我们使用printf来向屏幕输出字符,但是却没有办法将输出定位在屏幕上的某个特定位置上。 终端类型 许多Unix系统使用终端,尽管在今天的许多情况下,终端也许实际上是一个运行终端程序的PC。从历史上来说,不同的生产产商提供了大量的硬件终端。尽管他们都是使用转义序列(以转义字符开始的字符串)来提供对光标与属性的控制,例如粗体与闪烁等,但是他们并没有以标准的方式来提供这些特性。某些老的终端同时还具有不同的滚动功能,当发送backspace滚动条也许会消失。 硬件终端的多样性对于那些希望编写控制屏幕以及运行在多个终端类型上的软件的程序员是一个极大的问题。例如,ANSI标准使用转义序列Escape+[+A来将光标上移一行,然而ADM-3a终端却使用单独的控制字符Ctrl+K。 要编写处理各种不同的连接到Unix系统上的终端类型的程序是一件极其困难的任务。程序也许要为每一个终端类型提供不同的源代码。 这样在一个名为terminfo的包中提供一个解决方案就显得并不惊奇。程序并不会迎合各种终端类型,相反,程序会查找一个终端类型数据库来得到正确的信息。在大多数的现代Unix系统中,包括Linux,这些已经被集成到一个名为curses的软件包中,这就是我们下一章要了解的内容。 在Linux上,我们也许要使用curses的一个名为ncurses的实现,并且要包含ncurses.h文件来提供我们terminfo函数的原型。terminfo函数本身声明在他们自己的头文件term.h中,或者至少以前是这种情况。而在新版本的Linux系统上,在terminfo与ncurses之间有一个模糊的界线,许多需要terminfo函数的程序必须同时包含ncurses头文件。为避免以后的混乱,现代的Linux发行版本同时提供一个与Unix系统更兼容的curses头文件与库。在这些系统上,我们推荐使用curses.h与-lcurses。 标识我们的终端类型 Linux环境包含一个变量,TERM,他被设置为我们正在使用的终端类型。通常他是在系统登陆时由系统自动设置的。系统管理员也许会为每一个直接连接到终端的用户设置一个默认的终端类型,这些用户也许是要提供终端类型的远程或是网络用户。TERM的值可以通过telnet协商,并通过rlogin传递。 用户可以查询shell来确定他正使用的终端类型。 $ echo $TERM xterm $ 在这个例子中,shell是由一个名为xterm的程序来运行的,这是一个X Window系统的终端模拟器,或是提供类似功能的程序,例如KDE的Konsole或是Gnome的gnome-terminal。 terminfo软件包包含了一个功能与大量终端的转义序列的数据库,并且为程序员提供了统一的接口。这样编写的程序就可以在数据库扩展时利用未来终端的优点,而不是每一个程序都必须为不同的终端提供支持。 terminfo的功能是通过属性来描述的。这些属性存储在已编译的terminfo文件集合中,并且通常可以在/usr/lib/terminfo或是/usr/share/terminfo中找到。对于每一个终端(也有一些可以在terminfo中指定的打印机),有一个文件来定义其功能以及如何访问这些特性。为了避免创建一个非常大的目录,实际的文件存储在子目录中,而子目录的名字只是简单的终端类型的第一个字符。所以,VT100的定义可以在...terminfo/v/vt100中找到。 对于每一个终端类型都会以可读的源码的格式来编写一个terminfo文件,然后使用tic命令将其编译为应用程序可用的更为紧凑和高效的格式。奇怪的是,X/Open规范谈到源码以及编译的格式定义,但是却没有提到实际编译源码的tic命令。我们可以使用infocmp程序来输出一个已编译的terminfo实体的可读版本信息。 下面是一个VT100终端的terminfo文件的例子: $ infocmp vt100 vt100|vt100-am|dec vt100 (w/advanced video), am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3, acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=/E[5m$lt;2gt;, bold=/E[1m$lt;2gt;, clear=/E[H/E[J$lt;50gt;,

文档评论(0)

me54545 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档