Solaris 10、Shell 脚本、光标移动

Solaris 10、Shell 脚本、光标移动
#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) );

相关内容