我在某个随机网站上遇到了下面奇怪的字符序列。当编译并执行时,这个序列会清除终端中之前的所有内容。它是清除输出流缓冲区还是仅清除tty缓冲区?
int main()
{
printf("\033[H\033[J");
return 0;
}
我在某个随机网站上遇到了下面奇怪的字符序列。当编译并执行时,这个序列会清除终端中之前的所有内容。它是清除输出流缓冲区还是仅清除tty缓冲区?
int main()
{
printf("\033[H\033[J");
return 0;
}
这些是 ANSI 转义代码。
\033
代表 ESC
(ANSI 值为 27)。
ESC [ 是一种 转义序列 ,称为 控制序列引导符(CSI)。
CSI 命令以字符 ESC[
开头,后跟零个或多个参数。
\033[H
(即 ESC[H
) 和 \033[J
都是 CSI 代码。
\033[H
将光标移动到屏幕左上角(即屏幕的第一行的第一列)。
和
\033[J
清除从光标到屏幕末尾的屏幕部分。
当结合使用时,它会导致屏幕被清除,并将光标定位在屏幕开头。
这就是在bash中使用Ctrl+L或clear
命令时获得的功能。
这些 CSI 可以有参数。 如果没有提供参数,则将使用默认值。
\033
- ASCII转义字符
[H
- 将光标移动到起始位置
[J
- 擦除屏幕从当前行到屏幕底部的内容