繁体   English   中英

使用 C++ 代码清除 Linux 中的终端

[英]Clearing terminal in Linux with C++ code

好的,我一直在研究如何做到这一点,但假设我正在运行一个在终端上有大量输出的程序,我将如何从我的程序中清除屏幕,以便我可以保持我的程序运行?

我知道我可以在终端中输入clear并且它可以很好地清除它,但是就像我说的那样,对于这个程序,它对我更有益。

我发现了一些有用的东西,但是,我不确定它是什么或它在做什么。

cout << "\033[2J\033[1;1H";

那行得通,但我不知道它是什么,如果您能解释一下,我将不胜感激。

这些是 ANSI 转义码。 第一个 ( \\033[2J ) 从上到下清除整个屏幕 ( J ) ( 2 )。 第二代码( \\033[1;1H )在行光标定位1 ,列1

所有 ANSI 转义符都以序列ESC [开始,具有零个或多个由;分隔的参数 ,并以命令字母结尾(在您的情况下为JH )。 \\033是转义字符的 C 风格八进制序列。

在此处查看完整的路演。

而不是依赖于可能在意外情况下中断的特定转义序列(尽管接受这种权衡是好的,如果这是你想要的),你可以做你在 shell 中做的同样的事情:

std::system("clear");

尽管通常要避免使用 system(),但对于用户交互程序而言,额外的 shell 解析和进程开销都不重要。 在这种情况下,shell 转义也没有问题。

如果你确实想避免 system(),你总是可以 fork/exec 调用 clear。 如果您已经在使用 [n]curses 或其他终端库,请使用它。

为了可移植性,您应该从 termcap 的 cl(清除)功能(清除屏幕和光标主页)中获取字符串。 (或者按照 Roger Pate 的说法使用 std::system("clear") )。

man 3 termcap(在 ncurses 中)
男人 5 学期帽
设置 | grep TERMCAP

您可以在终端“清除>数据”中写入并读取转义序列的数据

0x1B[H0x1B[2J0x1B[3J]

所以

std::cout << "\033[H\033[2J\033[3J" ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM