#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) );