Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 直接使用终端功能_C_Linux_Unix_Terminal_Xterm - Fatal编程技术网

C 直接使用终端功能

C 直接使用终端功能,c,linux,unix,terminal,xterm,C,Linux,Unix,Terminal,Xterm,是否有人再直接使用terminfo功能,如tputs(),tparm(),tigetstr(),tigetnum() 我在网上找不到任何具有这些低级终端功能的实际例子 是否每个人都使用ncurses库来控制终端,而不使用这种低级代码 我认为这种低级代码很难读懂 我应该为这种低级代码而烦恼,还是只学习ncurses,这对于ncurses提供的高级代码来说是一种不那么沉重的负担 如果有人知道一些关于这些低级函数的实用信息,请与我分享 是否每个人都使用ncurses库来控制终端,而不去理会这个低级代码

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

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

是否每个人都使用
ncurses
库来控制终端,而不使用这种低级代码

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

我应该为这种低级代码而烦恼,还是只学习
ncurses
,这对于ncurses提供的高级代码来说是一种不那么沉重的负担

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

是否每个人都使用ncurses库来控制终端,而不去理会这个低级代码

这很容易检查

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

nm-D/lib64/libncurses.so.5.9 | fgrep'T'\
|sed的/^[0-9A-Fa-f]*T/'>/tmp/ncurses函数列表
现在看看有多少在各种程序中使用

用于f in/usr/bin/*;做
nm-D$f 2>/dev/null | fgrep'U'\
|sed's/^*U/'\
|fgrep-x-f-/tmp/ncurses函数列表和echo==$f;
完成

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

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

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

如果要使用不使用整个屏幕的
ncurses
,则必须使用低级函数,比如高亮显示文本或计算终端的尺寸。如果你想了解底层系统是如何工作的,我建议你阅读Linda Mui、Tim O'Reilly和John Strang的Termcap&Terminfo。对不起,你能逐步解释一下这个脚本的作用吗?第一个命令构建符号列表(nm-D),然后过滤它,只留下全局定义函数(fgrep),然后编辑除函数名(sed)以外的所有内容。第二种方法在/usr/bin中获取程序,并为每个程序构建符号列表(nm-D),然后过滤它以只留下未定义的符号(fgrep'U'),然后编辑它以只留下函数名(sed),然后在第一阶段构建的列表(fgrep-x-f-)中查找这些函数,然后打印程序名(echo)。最后,您将看到每个程序直接调用的libncurses函数。顺便说一句,问题中提到的“低级”代码将通过前面提供的脚本找到,因为它不区分高级/低级接口。