我想从控制台的左上角开始打印一些动态状态文本消息,在linux上将左侧区域留空(类似于watch -n 1 pwd)。如何使用C或C++实现?
watch -n 1 pwd
dy1byipe1#
您的终端很可能支持ANSI escape codes。这些提供了一种改变终端输出属性、控制光标等的方法。在下面的程序中,ESC被定义为转义码前缀,CLS被定义为清除屏幕的控制序列,HOME被定义为将光标移动到控制台窗口左上角的原始位置的控制序列。在支持ANSI转义码的终端模拟器中,将这些代码打印到终端窗口应该会产生预期的效果。请注意,C语言不支持这一点,但终端模拟器广泛支持这一点。
ESC
CLS
HOME
#include <stdio.h> /* ANSI Escape Sequences */ #define ESC "\x1B" #define CLS ESC"[2J" #define HOME ESC"[H" void clear_to_top(void) { printf(CLS); printf(HOME); fflush(stdout); } int main(void) { clear_to_top(); puts("Starting from the top...."); }
字符串
wnvonmuf2#
您可以清除终端屏幕,并通过向终端打印'\f'字节将光标设置到左上角。例如:putchar('\f'),但请记住,默认情况下stdout是行缓冲的,因此您可能需要使用fflush(stdout)刷新缓冲输出。'\f'代表 form feed,用于从打印机弹出页面的命令,并被终端解释为 clear screen 命令。ASCII中的字节值为12,也称为Ctrl-L。一些终端以这种方式处理它,但似乎OP的ConEmu,也不是macOS的Terminal或iTerm 2,也不是大多数X-Windows终端。所以这绝对不是解决问题的办法。
'\f'
putchar('\f')
stdout
fflush(stdout)
2条答案
按热度按时间dy1byipe1#
您的终端很可能支持ANSI escape codes。这些提供了一种改变终端输出属性、控制光标等的方法。
在下面的程序中,
ESC
被定义为转义码前缀,CLS
被定义为清除屏幕的控制序列,HOME
被定义为将光标移动到控制台窗口左上角的原始位置的控制序列。在支持ANSI转义码的终端模拟器中,将这些代码打印到终端窗口应该会产生预期的效果。请注意,C语言不支持这一点,但终端模拟器广泛支持这一点。
字符串
wnvonmuf2#
您可以清除终端屏幕,并通过向终端打印
'\f'
字节将光标设置到左上角。例如:putchar('\f')
,但请记住,默认情况下stdout
是行缓冲的,因此您可能需要使用fflush(stdout)
刷新缓冲输出。'\f'
代表 form feed,用于从打印机弹出页面的命令,并被终端解释为 clear screen 命令。ASCII中的字节值为12,也称为Ctrl-L。
一些终端以这种方式处理它,但似乎OP的ConEmu,也不是macOS的Terminal或iTerm 2,也不是大多数X-Windows终端。所以这绝对不是解决问题的办法。