直接使用终端能力

问题描述 投票:0回答:2

有人直接使用

terminfo
tputs()
tparm()
tigetstr()
等功能吗?

我在网上找不到任何具有这些低级终端功能的实际示例。

每个人都使用

tigetnum()

库来控制终端并且不关心这些低级代码吗?


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

我应该费心处理这些低级代码还是只学习

ncurses

,这对于 ncurses 提供的高级代码来说不会那么令人难以承受?


如果有人知道有关此类低级函数的一些实用信息,请与我分享。

c unix terminal xterm terminfo
2个回答
2
投票
每个人都使用 ncurses 库来控制终端并且不关心这些低级代码吗?

这很容易检查。

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

ncurses

现在看看其中有多少被用于各种程序中。

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



0
投票

“nm -D”列出了
    dynamic
  • 符号,即引用外部库的符号。 第一步从 ncurses 库中获取符号列表,并且
  • 通过查找在定义函数名称的地方找到的模式“T”来过滤它。
  • 将结果保存到文件 /tmp/ncurses-functions-list 后,第二个脚本测试 /usr/bin 中的每个程序
  • 第二个脚本中的过滤模式用于
  • 未定义
  • 符号,即来自另一个库的符号 过滤的结果是函数(或数据)名称的列表,然后将其与第一步中创建的列表进行匹配。
  • 改进它的一种方法是显示(按照最初的要求)哪些程序使用低级接口,哪些程序使用高级 ncurses 接口。正如 ncurses FAQ
库用户的类型

中所述,区分这些的方法是查看哪些程序调用 initscr 或 newterm (需要初始化高级接口),哪些程序不调用。一个简单的“ldd”将显示哪些程序与 ncurses 链接(给出总数),并且将函数列表减少到这两个将告诉(使用第二个脚本)哪个程序使用了高级接口。

© www.soinside.com 2019 - 2024. All rights reserved.