使用 C++ 代码清除 Linux 中的终端
- 2024-10-30 08:35:00
- admin 原创
- 136
问题描述:
好的,我一直在研究如何做到这一点,但是假设我正在运行一个在终端上有一大堆输出的程序,我该如何从我的程序内部清除屏幕,以便我可以保持我的程序运行?
我知道我只需clear
在终端中输入就可以将其清除,但就像我说的那样,对于这个程序来说,这对我来说更有益。
我发现了一些有用的东西,但是我不确定它是什么或它在做什么。
cout << "[2J[1;1H";
这有效,但我不知道它是什么,如果你能解释一下,我将非常感激。
解决方案 1:
这些是 ANSI 转义代码。第一个 ( [2J
) 清除整个屏幕 ( J
) 从上到下 ( 2
)。第二个代码 ( [1;1H
) 将光标定位在行1
、列处1
。
所有 ANSI 转义都以序列 开头ESC
`[,具有零个或多个以 分隔的参数
;,并以命令字母(在您的情况下)结尾
J。
H是
`转义字符的 C 样式八进制序列。
请参阅此处查看完整路演。
解决方案 2:
您不必依赖可能在意外情况下中断的特定转义序列(尽管如果您愿意,接受这种权衡是可以的),您可以执行与在 shell 上相同的操作:
std::system("clear");
虽然一般情况下应避免使用 system(),但对于用户交互程序而言,额外的 shell 解析和进程开销都不是很大。在这种情况下,shell 转义也没有问题。
如果您确实想避免使用 system(),您可以始终使用 fork/exec 来调用 clear。如果您已经在使用 [n]curses 或其他终端库,请使用它们。
解决方案 3:
为了便于移植,您应该从 termcap 的 cl(清除)功能(清除屏幕并将光标移至首页)获取字符串。(或者按照 Roger Pate 的说法使用 std::system("clear"))。
man 3 termcap(在 ncurses 中)
man 5 termcap
集 | grep TERMCAP
解决方案 4:
您可以在终端中写入“clear > data”,并在数据中读取转义序列
0x1B[H0x1B[2J0x1B[3J
所以
std::cout << "[H[2J[3J" ;
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)