Ich bin ein Neuling in Linux-Programmierung. : -)
Ich frage mich nur, ob mein Programm (unter Verwendung der C -Sprache) jeden einzelnen Tastenanschlag sofort in Linux erfassen kann und dann entscheiden kann, ob es echotiert oder nicht und wie es angezeigt wird, genau wie Telnet.
Wenn beispielsweise ein Benutzer "A" anschlägt, möchte ich, dass das Programm "B" anzeigt, wenn er "B", "C" usw. eingibt.
Es klingt lustig und nutzlos. Ich bin nur neugierig darauf.
Grundsätzlich hängt es stark davon ab, wie Sie sofort definieren.
Hier gibt es zwei Aufgaben. Die erste besteht darin, das normale Schlüsselecho zu deaktivieren, das in den meisten C-Eingabebibliotheken enthalten ist. Die zweite besteht darin, das neue Zeichen anstelle des alten auszugeben.
Im Pseudocode.
%Vor%Es gibt eine Reihe von Systemen, die kommunizieren, um einen Tastendruck zu erfassen.
Der letzte Schritt erfolgt mit einem Programm, das eine kontinuierliche Schleife ausführt, die Ereignisse vom X-Server erfasst und verarbeitet. Wenn Sie dieses Programm auf bestimmte Weise erweitern möchten (die Länge der Zeit, die die Taste gedrückt wurde), müssen Sie den anderen Programmen mitteilen, dass Sie "rohe" Tastaturereignisse haben wollen, was bedeutet, dass Sie nicht wirklich vollständig "gekocht" erhalten werden " Figuren. Als Ergebnis müssen Sie verfolgen, welche Tasten hoch und runter sind und wie lange, und mit all dem seltsamen Metaschlüsselverhalten in Ihrem Programm umgehen (das ist kein 'a', es ist ein 'A', weil shift ist nicht erreichbar, usw.).
Es gibt auch andere Verarbeitungsmodi, die berücksichtigt werden müssen, wie kanonisch und nicht-kanonisch, die steuern, ob die Ereignisse in zeilenorientierten Blöcken (Zeilenereignissen) oder zeichenorientierten Blöcken (Zeichenereignissen) empfangen werden sollen. Auch dies ist etwas kompliziert durch die Notwendigkeit, die Upstream-Programme auf die Anforderungen des Downstream-Clients aufmerksam zu machen.
Nun, da Sie eine Vorstellung von Ihrer Umgebung haben, sollten wir uns den tatsächlichen Code ansehen, der benötigt wird, um die Zeichenausgabe zu unterdrücken.
%Vor%Auch das ist nicht unmittelbar. Um sofort zu kommen, müssen Sie näher an die Quelle kommen, was schließlich ein Kernel-Modul bedeutet (das immer noch nicht so direkt ist wie der Tastatur-Mikrocontroller, der nicht so unmittelbar ist wie der Moment, an dem der Schalter tatsächlich geschlossen wird). Wenn genügend Elemente zwischen Quelle und Ziel vorhanden sind, wird es möglich, den Unterschied zu erkennen. In der Praxis wurde dieser Code jedoch von vielen Leuten bearbeitet, die den besten Kompromiss zwischen Leistung und Flexibilität suchen.
Edwin Buck lieferte eine großartige Antwort. Hier ist eine andere Alternative, die ncurses
verwendet, was solche Dinge ein bisschen einfacher macht und auf fast jeder Linux-Distribution und anderen Unix-Varianten unterstützt wird.
kompiliere mit gcc code.c -o code -lncurses
Und hier sind einige unterstützende Links:
ncurses noecho und andere - man-Seite
ncurses Programmierung HOWTO