Cómo crear un programa que reaccione al presionar un botón (como "más" en 'q')

Cómo crear un programa que reaccione al presionar un botón (como "más" en 'q')

Estoy tratando de darme cuenta de cómo funcionan las utilidades pg\more\less. Por ejemplo, cat somebigfile | más. Más ahora en modo interactivo. Su tabla fd es: 0 (leer tubería desde cat) 1 (stdout) 2 (stderr)

Puedo abrir /dev/tty en 3 fd y leer comandos desde allí. Pero más pueden ejecutar algunas acciones sin presionar enter. En Linux puedo usar ncurses. ¿Qué necesito saber para hacerlo en Solaris?

Respuesta1

La idea básica es leer() un carácter de su entrada; verhttp://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908como ejemplo (que descubrí a través de un resultado de búsqueda en 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);
}

información relacionada