这个字符序列“ \ 033 [H \ 033 [J””在C中做什么?

时间:2019-04-14 06:46:06

标签: c ansi-escape

我在某个随机网站中浏览了以下奇怪的字符序列。编译并执行后,此序列清除了终端中的所有先前内容。是清除输出流中的缓冲区还是仅清除tty缓冲区?

int main()
{
   printf("\033[H\033[J");
   return 0;
}

2 个答案:

答案 0 :(得分:4)

如果我没记错的话,它会使用ANSI/VT100 Terminal Control Escape Sequences

\033-ASCII转义字符

[H-将光标移动到原始位置

[J-从当前行到屏幕底部删除屏幕

但是,此命令可能并非在每个终端/控制台中都兼容。

答案 1 :(得分:3)

这些是ANSI escape codes

\033代表ESC(ANSI值27)。

ESC [是一种称为escape sequenceControl Sequence Introducer (CSI)

CSI命令以ESC[开头,后跟零个或多个参数。

\033[H(即ESC[H)和\033[J是CSI代码。

\033[H将光标移动到屏幕的左上角(即屏幕第一行的第一列)。

\033[J清除从光标到屏幕结尾的屏幕部分。

组合使用时,会导致屏幕被清除,并且光标位于屏幕的开头。

这是在bash上使用 Ctrl + L clear命令时获得的功能。

这些CSI也可以具有参数。如果没有提供,它将使用默认值。