我编写了一个需要偶尔清除终端屏幕的小型控制台程序。我在 *nix 系统上/为 *nix 系统编写了代码,并在这些实例中使用了 system("clear")
。代码完成后,我对其进行了审查以评估代码的可移植性。上述清除屏幕的方法是我唯一明显的可移植性问题。然后我寻找其他可能的方法来清除终端并找到了一些关于 ANSI Cursor Indexing
的文档,特别是:
void cls() {
//27 is ESC ASCII char
printf("%c[2J",27); //clears screen
printf("%c[0;0H",27); //sets cursor at [0,0]
}
令我惊讶的是,这段代码在我的 *nix 系统上运行得非常好。我想知道,这个 ANSI 游标索引方案是可移植的吗?此代码能否在所有具有 C 标准编译器的系统上编译并正常运行?”
最佳答案
ANSI 和 VT100 转义序列非常接近,这意味着如果终端是这两者中的任何一个,上面列出的命令集肯定会起作用。但是请记住,ANSI 是 VT100 的超集,因此 VT100 兼容终端将无法理解所有 ANSI 序列。
VT100 终端模拟器绝对是最常见的(包括 xterm 和其他“X-windows 样式外壳”的默认设置)。
很明显,比如说,Volker-Craig 404 终端仿真器 [有人用过吗? ;)] 不会理解 ANSI 或 VT100 转义序列,或者任何转义序列。
我还要指出,通过将 ESC 合并到常量字符串中,您的代码会更简单:
printf("\033[2J");
或者如果你想让它更具可读性:
#define ESC_STR "\033"
printf(ESC_STR"[2J");
关于c - ANSI 游标索引是否可移植,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802126/