これは、ncurses スタイルのキー押下を処理するために私が思いつくことができる最善のものです (実際には、さまざまな理由で ncurses の代替案を書いています)。
このコードで作成されたサンプル アプリは、ユーザーに「Escape を押して終了する」ようにアドバイスします。実際には、エスケープ + エスケープまたはエスケープ + 矢印キーが必要です。これを修正したいと思います。
#include <sys/ioctl.h>
#include <termios.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *get_key() {
char c = getchar();
switch(c) {
case 'a': return "a";
case 'b': return "b";
case 'c': return "c";
...
case '\x1b':
c = getchar();
switch(c) {
case '[':
c = getchar();
switch(c) {
case 'A': return "up";
case 'B': return "down";
case 'C': return "right";
case 'D': return "left";
}
case '\x1b': return "escape";
}
default: return "unknown";
}