繁体   English   中英

直接使用终端功能

[英]directly using terminal capabilities

是否有人使用terminfo功能功能,如tputs() tparm() tigetstr() tigetnum()直接了吗?

我在网上找不到这些低级终端功能的实际例子。

是否每个人都使用ncurses库来控制终端而且不打扰这个低级代码?

我认为这个低级代码很难读。

我应该用这种低级别的代码打扰或只是学习ncurses是少了很多热烈,ncurses的提供更高级别的代码?

如果有人知道有关这种低级功能的实用信息,请与我分享。

是否每个人都使用ncurses库来控制终端而且不打扰这个低级代码?

这很容易检查。

首先,在ncurses库中准备一个函数列表。 在我的系统上将是:

nm -D /lib64/libncurses.so.5.9 | fgrep ' T ' \
  | sed 's/^[0-9A-Fa-f ]*T //' > /tmp/ncurses-functions-list

现在看看在各种程序中使用了多少这些。

for f in /usr/bin/* ; do 
    nm -D $f 2>/dev/null | fgrep ' U ' \
      | sed 's/^ *U //' \
      | fgrep -x -f - /tmp/ncurses-functions-list && echo ==== $f; 
done

脚本是一个起点,但需要改进。 首先,告诉它它的作用:

  • “nm -D”列出动态符号,即那些引用外部库的符号。
  • 第一步从ncurses库中获取符号列表,和
  • 通过查找在定义函数名称的位置找到的模式“T”来过滤它。
  • 将结果保存到文件/ tmp / ncurses-functions-list后,第二个脚本测试/ usr / bin中的每个程序
  • 第二个脚本中的过滤器模式用于未定义的符号,即来自另一个库的符号
  • 过滤的结果是一个函数(或数据)名称列表,然后与第一步中的列表进行匹配。

改进它的一种方法是显示(最初请求)哪些程序使用低级接口,哪些程序使用高级ncurses接口。 正如ncurses常见问题解答中所述,库用户类型区分这些是区分哪些程序调用initscr或newterm(需要初始化高级接口),哪些不需要。 一个简单的“ldd”将显示哪些程序与ncurses链接(以给出总数),并将功能列表减少到那两个会告诉 - 使用第二个脚本 - 使用高级接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM