Если вы пишете реальную программу, которая использует мышь в Linux, вы, скорее всего, пишете X-приложение, и в этом случае вам следует запросить X-сервер о событиях мыши. Qt , GTK и libsdl - некоторые популярные библиотеки C, которые предоставляют функции для доступа к мыши, клавиатуре, графике, таймерам и другим функциям, необходимым для написания программ с графическим интерфейсом. Ncurses - похожая библиотека для терминальных приложений.
Но если вы изучаете свою систему или не можете использовать X по какой-либо причине, вот как это работает на интерфейсе ядра.
Основная идея философии UNIX заключается в том, что «все это файл». Более конкретно, как можно больше вещей должно быть доступно через одни и те же системные вызовы, которые вы используете для работы с файлами. И поэтому интерфейс ядра мыши - это файл устройства. Вы можете open()
, по желанию, позвонить poll()
или select()
узнать, есть ли входящие данные, и read()
прочитать данные.
Во времена до USB конкретным файлом устройства часто был последовательный порт, например /dev/ttyS0
, или порт PS / 2 /dev/psaux
. Вы говорили с мышью, используя любой аппаратный протокол, встроенный в мышь. В наши дни /dev/input/*
подсистема является предпочтительной, поскольку она обеспечивает унифицированный, независимый от устройства способ обработки множества различных устройств ввода. В частности, /dev/input/mice
вам сообщат о событиях от любой мыши, подключенной к вашей системе, а /dev/input/mouseN
также события от определенной мыши. В большинстве современных дистрибутивов Linux эти файлы создаются динамически, когда вы подключаете мышь.
Для получения дополнительной информации о том, что именно вы будете читать или записывать в файл устройства мыши, вы можете начать с input / input.txt в документации ядра. В частности, посмотрите разделы 3.2.2 (mousedev) и 3.2.4 (evdev), а также разделы 4 и 5.