Como fazer um programa que reagirá ao pressionar o botão (como "mais" em 'q')

Como fazer um programa que reagirá ao pressionar o botão (como "mais" em 'q')

Estou tentando entender como funciona os utilitários pg\more\less. Por exemplo, cat somebigfile | mais. Mais agora em modo interativo. Sua tabela fd é: 0 (leia o pipe do gato) 1 (stdout) 2 (stderr)

Posso abrir /dev/tty em 3 fd e ler comandos daí. Mas mais podem executar algumas ações sem pressionar Enter. No Linux eu posso usar ncurses. O que preciso perceber para ter sucesso no Solaris?

Responder1

A ideia básica é ler() um caractere da sua entrada; verhttp://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908como exemplo (que descobri por meio de um resultado de pesquisa do Google dehttps://stackoverflow.com/questions/9854267/implementing-the-more-unix-utility-command):

int readch(void)
{
    unsigned char c;

    errno = 0;
    if (read(fileno(stderr), &c, 1) <= 0) {
        if (errno != EINTR)
            end_it(0);
        else
            c = otty.c_cc[VKILL];
    }
    return (c);
}

informação relacionada