这个字符序列 "\033[H\033[J" 在 C 中有什么作用?

Sad*_*yan 4 c ansi-escape

我在一些随机网站中浏览了以下奇怪的字符序列。当编译和执行时,这个 Sequence 清除了终端中所有以前的内容。它是清除输出流中的缓冲区还是只清除 tty 缓冲区?

int main()
{
   printf("\033[H\033[J");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

J..*_*..S 10

这些是ANSI 转义码

\033代表ESC(ANSI 值 27)。

ESC [ 是一种称为控制序列引入器 (CSI)转义序列

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

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

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

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

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

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

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


Who*_*per 6

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

\033- ASCII 转义字符

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

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

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

  • @MaifeeUlAsad 它似乎在 Codeblocks 中不起作用。我之前也尝试过。但在大多数 Linux 系统上都是如此。 (2认同)