Se stai scrivendo un programma del mondo reale che utilizza il mouse in Linux, molto probabilmente stai scrivendo un'applicazione X, e in tal caso dovresti chiedere al server X gli eventi del mouse. Qt , GTK e libsdl sono alcune librerie C popolari che forniscono funzioni per l'accesso a mouse, tastiera, grafica, timer e altre funzionalità necessarie per scrivere programmi GUI. Ncurses è una libreria simile per applicazioni terminali.
Ma se stai esplorando il tuo sistema o non puoi usare X per qualsiasi motivo, ecco come funziona nell'interfaccia del kernel.
Un'idea centrale nella filosofia UNIX è che "tutto è un file". Più specificamente, quante più cose possibili dovrebbero essere accessibili attraverso le stesse chiamate di sistema utilizzate per lavorare con i file. E quindi l'interfaccia del kernel per il mouse è un file di dispositivo. Puoi open()
, facoltativamente, chiamare poll()
o select()
su di esso per vedere se ci sono dati in arrivo e read()
per leggere i dati.
In tempi pre-USB, il file di dispositivo specifico era spesso una porta seriale, ad esempio /dev/ttyS0
, o una porta PS / 2, /dev/psaux
. Hai parlato con il mouse usando qualsiasi protocollo hardware incorporato nel mouse. Al giorno d'oggi, /dev/input/*
si preferisce il sottosistema, in quanto fornisce un modo unificato e indipendente dal dispositivo di gestire molti dispositivi di input diversi. In particolare, /dev/input/mice
ti darà eventi da qualsiasi mouse collegato al tuo sistema e /dev/input/mouseN
ti darà eventi da un determinato mouse. Nella maggior parte delle moderne distribuzioni Linux, questi file vengono creati dinamicamente quando si collega un mouse.
Per ulteriori informazioni su cosa esattamente leggere o scrivere nel file del dispositivo del mouse, è possibile iniziare con input / input.txt nella documentazione del kernel. Guarda in particolare le sezioni 3.2.2 (mousedev) e 3.2.4 (evdev), e anche le sezioni 4 e 5.