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

时间:2010-10-31 06:10:42

标签: c++ linux terminal

好的,我一直在研究如何做到这一点,但是说我正在运行一个在终端上有一点输出的程序,我如何从我的程序中清除屏幕以便我可以保留我的程序运行

我知道我可以在终端输入clear并清除它,但就像我说的那样,对于这个程序来说对我来说更有利。

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

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

这有效,但我不知道它是什么,如果你能解释它,我会非常感激。

4 个答案:

答案 0 :(得分:44)

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

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

有关完整的路演,请参阅here

答案 1 :(得分:10)

不依赖于在意外情况下可能会破坏的特定转义序列(虽然接受权衡很好,如果它是你想要的),你可以在shell上做同样的事情:

std::system("clear");

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

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

答案 2 :(得分:0)

为了便于携带,你应该从termcap的cl(清除)功能中获取字符串(Clear screen和cursor home)。 (或者使用Roger Pate所说的std :: system(“clear”)。

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

答案 3 :(得分:0)

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

0x1B[H0x1B[2J0x1B[3J]

所以

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