Wie erstelle ich ein Programm, das auf das Drücken einer Taste reagiert (z. B. „mehr“ auf „q“)

Wie erstelle ich ein Programm, das auf das Drücken einer Taste reagiert (z. B. „mehr“ auf „q“)

Ich versuche herauszufinden, wie die Dienstprogramme pg\more\less funktionieren. Zum Beispiel cat somebigfile | more. More jetzt im interaktiven Modus. Seine fd-Tabelle ist: 0 (Read Pipe von Cat) 1 (stdout) 2 (stderr)

Ich kann /dev/tty auf 3 fd öffnen und dort Befehle lesen. Außerdem kann ich einige Aktionen ausführen, ohne die Eingabetaste zu drücken. Unter Linux kann ich ncurses verwenden. Was muss ich beachten, um dies unter Solaris zu erreichen?

Antwort1

Die Grundidee besteht darin, ein Zeichen aus Ihrer Eingabe zu lesen (read()); siehehttp://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/view/head:/text-utils/more.c#L1908als Beispiel (das ich über ein Google-Suchergebnis entdeckte)https://stackoverflow.com/questions/9854267/implementierung-des-weiteren-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);
}

verwandte Informationen