Problema com kbhit () [e getch ()] para Linux

while(ch != 'q') 
{
  printf("looping\n");
  sleep(1);
  if(kbhit()) 
   {
    ch = readch();
    printf("you hit %c\n",ch);
   }
}

Este código me dá uma funcionalidade parecida com getch () de bloqueio. Eu estou tentando usar esse código para capturar as teclas de seta para baixo.

Adicionado: Tentando capturar os códigos-chave da seta para cima me dá 3 caracteres 27, 91 e 65. Usando if / else eu estou tentando correspondência de padrões, mas eu só recebo 2 caracteres. O próximo é capturado quando a próxima tecla é pressionada.

Eu quero capturar palavras completas usando getchar () enquanto sempre procurando por certas chaves o tempo todo (esc, del etc.).