/ / Klávesové zariadenie v systéme Unix - linux, klávesnica, ovládače, zariadenie

Klávesnice prístroja v Unix - linux, klávesnice, ovládače zariadení

Ako zachytiť všetky užívateľské vstupy čítaním jedného bajtu naraz?

Urobil som toto kódovanie, ale nefunguje to

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);

Očakával som, že terminál bude čakať na vstup, ale neurobil to.

odpovede:

7 pre odpoveď č. 1

Samotné klávesnicové zariadenie je jednou z položiek v /dev/input, Klávesnice a iné vstupné zariadenia môžete vyhľadať podľa typu pripojenia (napr. PS / 2, USB, ...) v systéme Windows /dev/input/by-path, Na prístup budete samozrejme potrebovať spustenie ako rootpriamo hardvér a budete musieť poskytnúť svoj vlastný preklad zo surových bajtov pochádzajúcich z klávesnice do vecí, ako sú stlačenia klávesov a vydania klávesov. Toto pravdepodobne nie je to, čo chcete.

Ak prevádzkujete aplikáciu GUI, je potrebné zavolať metódou nízkej úrovne XNextEvent a ďalšie funkcie v tej istej rodine. Dekódovanie vstupných udalostí nie je úplne triviálne, pretože je na aplikáciách, aby aplikovali modifikátory. Pomohol by vám rámec GUI (Motif, Gtk, Qt, ...).

Ak prevádzkujete terminálovú aplikáciu, čítajte zo štandardného vstupu alebo z /dev/tty (/dev/tty je vždy terminál, na ktorom beží váš program, aj keď bol štandardný vstup presmerovaný). Budete chcieť dať terminál dovnútra surový režim, Získate dekódované tlačidlá znakov a funkčné klávesy väčšinou ako únikové sekvencie. Aj tu pomáha knižnica, de facto štandard je ncurses.


1 pre odpoveď č. 2

Čo presne chcete robiť?

Ak hľadáte nezašifrovaný vstup v termináli, tcsetattr() je to, čo hľadáte - musíte terminál prepnúť do nekanonického režimu, t. j. nastaviť príznaky terminálu tak, aby neobsahovali ICANON - viď napr. tento útržok kódu, vidieť man termios (alebo názov funkcie, obvykle odkazuje na rovnakú manuálovú stránku v systéme Linux).

Ak chcete mať exkluzívny prístup ku klávesnici, je to oveľa komplikovanejšie.