Se você está escrevendo um programa do mundo real que usa o mouse no Linux, provavelmente você está escrevendo um aplicativo X, e nesse caso você deve perguntar ao servidor X por eventos de mouse. Qt , GTK , e libsdl são algumas bibliotecas C populares que fornecem funções para acessar mouse, teclado, gráficos, timers e outros recursos necessários para escrever programas GUI. Ncurses é uma biblioteca semelhante para aplicativos de terminal.
Mas se você está explorando o seu sistema, ou você não pode usar o X por alguma razão, aqui está como ele funciona na interface do kernel.
Uma ideia central na filosofia do UNIX é que "tudo é um arquivo". Mais especificamente, o máximo possível de coisas deve estar acessível através das mesmas chamadas de sistema que você usa para trabalhar com arquivos. E assim a interface do kernel para o mouse é um arquivo de dispositivo. Você open()
, opcionalmente, chamará poll()
ou select()
para ver se há dados de entrada e read()
para ler os dados.
Em tempos pré-USB, o arquivo de dispositivo específico costumava ser uma porta serial, por exemplo, /dev/ttyS0
ou uma porta PS / 2, /dev/psaux
. Você conversou com o mouse usando qualquer protocolo de hardware que estivesse embutido no mouse. Atualmente, o subsistema /dev/input/*
é o preferido, pois fornece uma maneira unificada e independente de dispositivos de lidar com muitos dispositivos de entrada diferentes. Em particular, /dev/input/mice
fornecerá eventos de qualquer mouse conectado ao seu sistema e /dev/input/mouseN
fornecerá eventos de um determinado mouse. Na maioria das distribuições Linux modernas, esses arquivos são criados dinamicamente quando você conecta um mouse.
Para mais informações sobre exatamente o que você leria ou escreveria no arquivo do dispositivo do mouse, você pode começar com input / input.txt na documentação do kernel. Olhe em particular nas seções 3.2.2 (mousedev) e 3.2.4 (evdev), e também nas seções 4 e 5.