#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
互換性のない解釈があります。
1つ目はカーソル位置の保存または端末エミュレータのリセットで、後者はSolaris専用のインタフェースです。
ポータブル画面処理にはncursesなどのライブラリを使用する必要がありますが、まだエスケープシーケンスをハードコードしたい場合は、期待どおりに機能できます。
printf ( "\0337\033[6;45H %s \0338", asctime (timeinfo) );