Tastatur Gerät in Unix
Gewusst wie: erfassen der Benutzer-Eingabe -, lese ein byte zu einem Zeitpunkt?
Habe ich dieses coding, aber es funktioniert nicht
if ((fd = open("/dev/char", O_RDONLY) != 1) {
tty = open("/dev/tty", O_RDONLY);
tcsetattr(0, TCSANOW, &orig_info);
read (fd, &buf, sizeof(char));
}
close(fd);
Erwartete ich, dass das terminal zu warten, für den input, aber das ist es nicht.
Nein, nur Lesen vom fd 0
InformationsquelleAutor Bunny Bunny | 2013-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Tastatur Gerät selbst ist einer der Einträge in
/dev/input
. Können Sie Tastaturen und andere Eingabegeräte, indem Sie Ihren Verbindungstyp (z.B. PS/2, USB, ...) in/dev/input/by-path
. Natürlich müssen Sie als "root" ausgeführt, um direkt auf die hardware zugreifen, und Sie brauchen, um Ihre eigene übersetzung von raw-bytes kommen von der Tastatur in Dinge wie Schlüssel drückt und den Schlüssel freigibt. Dies ist wahrscheinlich nicht das, was Sie wollen.Wenn Sie eine GUI-Anwendung, die low-level-Methode ist zu nennen,
XNextEvent
und andere Funktionen in der gleichen Familie. Dekodierung Eingangs-Ereignisse ist nicht ganz trivial, da es bis zu Anwendungen gelten die Modifikatoren. Ein GUI-framework (Motif, Gtk, Qt, ...) würde helfen.Wenn Sie eine terminal-Anwendung, Lesen von standard-input oder aus
/dev/tty
(/dev/tty
ist immer das terminal, dass ein Programm ausgeführt wird, selbst wenn die Standardeingabe umgeleitet wurde). Sie wollen, um das terminal in raw-Modus. Erhalten Sie dekodiert zeichentasten und Funktionstasten meist als escape-Sequenzen. Auch hier ist die Bibliothek hilft; die de-facto-standard ist ncurses.InformationsquelleAutor Gilles
Was genau möchten Sie tun?
Wenn das, was du suchst ist die Ungepufferte Eingabe im terminal
tcsetattr()
ist, was Sie suchen - setzen Sie das terminal in den nicht-kanonischen Modus, d.h. die terminal-flags nicht enthaltenICANON
- siehe z.B. dieses code-snippet. Sehenman termios
(oder den Namen der Funktion, in der Regel links zu den gleichen Mann Seite unter Linux).Wenn Sie wollen, um den exklusiven Zugriff auf die Tastatur, es ist viel komplizierter.
Tastaturen sind sehr komplexen Geräten...
die Sache ist, dass in den meisten Fällen haben Sie nicht möchten, Lesen Sie von der Tastatur als solche - Gilles Antwort Summen, die sich ziemlich gut (wie immer :)). Und das ist, warum es besser ist, das problem zu beschreiben, das Sie lösen möchten - es könnte sich herausstellen, dass Sie nicht die Spitze in die beste Richtung.
Das problem ist sehr einfach. Öffnen Sie die Tastatur-Gerät und Lesen Sie ein byte zu einem Zeitpunkt. Um die Kontrolle über die Tastatur-wir haben zu Stift /dev/tty explizit.
nicht die Tastatur Gerät, ist es verarbeitet Eingaben (und nicht sogar brauchen, um eine lokale Tastatur bei z.B. remote-shells). Das ist, warum ich schrieb, dass die Angabe Ihres Problems helfen könnte - "ich muss öffnen Sie die Tastatur-Gerät" ist nicht das problem, das Sie lösen vielmehr ist es so etwas wie "ich muss das Lesen Passwort von dem Benutzer ein Zeichen von input-zu einer Zeit, und es muss nicht im Klartext auf dem Bildschirm" oder "ich muss erfassen alle "Tastatur-Eingabe". Um so mehr Kontext bekommen Sie bessere Antworten.
InformationsquelleAutor peterph