[英]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 [开始,具有零个或多个由;分隔的参数。 ,并以命令字母结尾(在您的情况下为J和H )。 \\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.