清除终端的方法
无意间发现ctrl + l背后的实现原理。那就是:
- 向stdout输出字符串{0x1b, 0x5b, 0x48, 0x1b, 0x5b, 0x4a}序列
- 用shell执行printf ‘\033[H\033[J’(本质上就是输出上面的序列)
可用简单的代码实现top命令显示效果:
#include <stdio.h>
#include <unistd.h>
char magic_str[] = {0x1b, 0x5b, 0x48, 0x1b, 0x5b, 0x4a};
int main()
{
while (1) {
for (int i = 0; i < 6; i++)
printf("%c", magic_str[i]);
printf("hello world!\n");
for (int i = 0; i < 20; i++) {
printf("=");
fflush(stdout);
usleep(200 * 1000);
}
sleep(1);
}
return 0;
}