直接使用终端功能

时间:2014-09-22 19:05:07

标签: c linux unix terminal xterm

是否有人直接使用terminfotputs()tparm()tigetstr()tigetnum()功能?

我无法通过这些低级终端功能在线找到任何实际示例。

每个人都使用ncurses库来控制终端并且不会对这个低级代码感到烦恼吗?

我觉得这个低级代码很难读。

我是否应该费心使用这个低级代码,或者只是学习ncurses,而使用ncurses提供的更高级别的代码更难以解决这个问题?

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

2 个答案:

答案 0 :(得分:2)

  

每个人都使用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

答案 1 :(得分:0)

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

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

改进它的一种方法是显示(最初请求)哪些程序使用低级接口,哪些程序使用高级ncurses接口。正如ncurses FAQ Types of library users中所提到的,区分这些的方法是查看哪些程序调用initscr或newterm(需要初始化高级接口),哪些不需要。一个简单的“ldd”将显示哪些程序与ncurses链接(以给出总数),并将功能列表减少到第二个脚本 - 使用高级接口。