这个字符序列 "\033[H3[J" 在 C 中做什么?
What this character sequence "\033[H\033[J" does in C?
我在某个随机网站上浏览了以下奇怪的字符序列。编译执行时,这个Sequence清空了terminal之前的所有内容。它是清除输出流中的缓冲区还是仅清除 tty 缓冲区?
int main()
{
printf("3[H3[J");
return 0;
}
如果我没记错的话,它利用了ANSI/VT100 Terminal Control Escape Sequences。
3
- ASCII 转义字符
[H
- 将光标移动到起始位置
[J
- 擦除从当前行到屏幕底部的屏幕
但是,此命令可能不兼容所有 terminal/console。
3
代表 ESC
(ANSI 值 27)。
ESC [ 是一种 escape sequence called Control Sequence Introducer (CSI).
CSI 命令以 ESC[
开头,后跟零个或多个参数。
3[H
(即ESC[H
)和3[J
是CSI代码。
3[H
将光标移动到屏幕左上角(即屏幕第一行第一列)。
和
3[J
清除从光标到屏幕末尾的屏幕部分。
当组合使用时,它会导致屏幕被清除,光标位于屏幕的开头。
这是在 bash 上使用 Ctrl+L 或 clear
命令时获得的功能.
这些CSI也可以有参数。如果提供 none,它将使用默认值。
我在某个随机网站上浏览了以下奇怪的字符序列。编译执行时,这个Sequence清空了terminal之前的所有内容。它是清除输出流中的缓冲区还是仅清除 tty 缓冲区?
int main()
{
printf("3[H3[J");
return 0;
}
如果我没记错的话,它利用了ANSI/VT100 Terminal Control Escape Sequences。
3
- ASCII 转义字符
[H
- 将光标移动到起始位置
[J
- 擦除从当前行到屏幕底部的屏幕
但是,此命令可能不兼容所有 terminal/console。
3
代表 ESC
(ANSI 值 27)。
ESC [ 是一种 escape sequence called Control Sequence Introducer (CSI).
CSI 命令以 ESC[
开头,后跟零个或多个参数。
3[H
(即ESC[H
)和3[J
是CSI代码。
3[H
将光标移动到屏幕左上角(即屏幕第一行第一列)。
和
3[J
清除从光标到屏幕末尾的屏幕部分。
当组合使用时,它会导致屏幕被清除,光标位于屏幕的开头。
这是在 bash 上使用 Ctrl+L 或 clear
命令时获得的功能.
这些CSI也可以有参数。如果提供 none,它将使用默认值。