我在某个随机网站中浏览了以下奇怪的字符序列。编译并执行后,此序列清除了终端中的所有先前内容。是清除输出流中的缓冲区还是仅清除tty缓冲区?
int main()
{
printf("\033[H\033[J");
return 0;
}
答案 0 :(得分:4)
如果我没记错的话,它会使用ANSI/VT100 Terminal Control Escape Sequences。
\033
-ASCII转义字符
[H
-将光标移动到原始位置
[J
-从当前行到屏幕底部删除屏幕
但是,此命令可能并非在每个终端/控制台中都兼容。
答案 1 :(得分:3)
\033
代表ESC
(ANSI值27)。
ESC [是一种称为escape sequence的Control Sequence Introducer (CSI)。
CSI命令以ESC[
开头,后跟零个或多个参数。
\033[H
(即ESC[H
)和\033[J
是CSI代码。
\033[H
将光标移动到屏幕的左上角(即屏幕第一行的第一列)。
和
\033[J
清除从光标到屏幕结尾的屏幕部分。
组合使用时,会导致屏幕被清除,并且光标位于屏幕的开头。
这是在bash上使用 Ctrl + L 或clear
命令时获得的功能。
这些CSI也可以具有参数。如果没有提供,它将使用默认值。