#include <signal.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <time.h> void prtime() { time_t rawtime; struct tm * timeinfo; char *s; signal(SIGALRM, prtime); time ( &rawtime ); timeinfo = localtime ( &rawtime ); alarm (1) ; //printf("Time\n"); printf ( "\033[s\033[6;45H %s \033[u", asctime (timeinfo) ); } int main() { signal(SIGALRM, prtime); alarm(1); printf("continue instructions\n"); while (1) { pause(); printf("continue instructions\n"); } }
我只是尝试在终端的特定位置写入时钟,但我想在写入时钟之前保存光标位置,然后在写入时钟后恢复该位置。
但\033[s
&\033[u
不起作用。
答案1
您正在使用的命令CSI s
根据CSI u
实现的不同具有不兼容的解释。
第一个可以是“保存光标位置”或“重置终端仿真器”,后者是 Solaris 专用接口。
您应该使用像 ncurses 这样的库来实现便携式屏幕处理,但如果您仍然想对转义序列进行硬编码,这可能会达到您的预期:
printf ( "\0337\033[6;45H %s \0338", asctime (timeinfo) );