请教如何在linux命令行中通过键盘上下键读取一个文本文件的一行显示在命令行中

melamelascx 2007-04-13 01:32:46
并且当读取显示下一行的时候能够将上一行的内容消去掉?就像输入命令的时候可以通过上下键把以前输入过的命令显示出来一样,3x~~
...全文
1071 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
melamelascx 2007-04-13
  • 打赏
  • 举报
回复
wen ti jie jue!!!
as freshui said!
3x all!!!!
freshui 2007-04-13
  • 打赏
  • 举报
回复
getch() 不用通过回车判断
他就是等待你敲一个字符的

不过这里键盘的上下键是不刻显示字符, 要比较ascII马或者是键盘映射的码值 多少忘了
sinall 2007-04-13
  • 打赏
  • 举报
回复
好像可以,看看tput命令吧。
melamelascx 2007-04-13
  • 打赏
  • 举报
回复
虽然还没有尝试,但是5月的风所说的就是我想表达的意思,但是不知道如何不通过敲回车来判别上下键
melamelascx 2007-04-13
  • 打赏
  • 举报
回复
谢谢楼上各位,没想到牵涉这么多东西,那如果仅仅想通过不敲回车来获取键盘输入的内容,这个有办法实现吗?
freshui 2007-04-13
  • 打赏
  • 举报
回复
hehe 看样子挺难啊

你这样行不? 没实现过
通过按上下键, 将读取文件的指针移到文件上一行或者下一行的开头, 然后将该行print出来,
print的时候用\b\r吧, 请掉当前屏幕行并移动指针到屏幕当前行开头

我觉得这样能实现, 而且应该挺简单的...


我觉得也不用搞那么复杂
getch() 之后 一个case语句, printf函数 即可搞定
凌殿Y_ST 2007-04-13
  • 打赏
  • 举报
回复
命令列表可以一次载入到一个数组中去,而获取键盘输入事件,可以通过getchr()或相关的取字符的函数,但比较的时候,是用扫描码,而不是ASCII,因为上下键没有定义ASCII;另一个可以用清屏函数来清除前面的显示内容,具体函数我也忘了,有时间我去试试看好不好实现。
iambic 2007-04-13
  • 打赏
  • 举报
回复
保存记录,键盘映射,终端读写。

覆盖屏幕内容用curses库。

google curses.h

动手前确认你确实需要这样的功能。
al0n9 2007-04-13
  • 打赏
  • 举报
回复
linux下面,没有键盘输入事件这个概念。
linux下面,有前台程序和后台程序的概念。只有前台程序,才能得到键盘输入,操作系统会把键盘扫描码放到前台程序的输入缓冲区中。在任一时刻,每个控制台只能有一个程序是前台程序。
你必须在自己的程序中读取用户的按键,然后调用终端控制函数,实现回滚功能。回滚的功能,是由各个终端提供的函数来完成的,实际上,就是向终端发送一些控制码,终端收到这些控制码之后,就能做出回滚、颜色加亮等的动作。
但是,这些控制码,各个终端之间并不是完全通用的,所以,你必须通过终端控制函数来控制终端。
melamelascx 2007-04-13
  • 打赏
  • 举报
回复
原来这么复杂啊,如果在命令行中,运行我的程序后,这时通过摁一下 上下键 就能显示一行内容,并且每次现实的内容都能覆盖原来屏幕上的那一行内容,这样还这么复杂吗?如何实现阿?其实核心问题是不知倒如何获取键盘输入事件,另外一点是不知道如何将已经显示到屏幕上的内容给用心的内容覆盖掉,用c++实现
凌殿Y_ST 2007-04-13
  • 打赏
  • 举报
回复
我给出一个大概实现的思路,具体的没去试过:
=================================
1、先打开一个命令列表文件,从0行开始,并设定index = 0;
2、用switch...case...操作上下选择方向;
3、行取出命令串,并回显在屏幕上;
4、取得Enter按键时,用execl()调用命令串,实现命令的执行;
5、<<有待实现>> ^o^
凌殿Y_ST 2007-04-13
  • 打赏
  • 举报
回复
linux还没这种功能吧?! -_-!!!

history是已经运行过的命令,并以列式保存在shell缓冲区中的~

不过这种功能还是可以实现的!~

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧