これは主に好奇心に由来するものです。私は低レベルでイベント処理がどのように機能するかを理解しようとしていますので、これを行うことができるソフトウェアをお勧めしません。
たとえば、マウスクリックに反応するC / C ++プログラムを作成するには、システムコールを使用して一部の機能をカーネルに関連付ける必要があるか、マウスの状態を継続的に確認する必要があります。わかりません。
C / C ++では、ほとんどすべてが可能であるため可能であると考えており、レベルが低すぎるため、どのように動作するかに最も興味がありますが、直接実装する必要はありません。
問題は、Linuxでどのように機能するのか、特定のシステムコール、Cライブラリなどがありますか?
ベストアンサー1
Linuxでマウスを使用する実際のプログラムを書く場合、Xアプリケーションを書く可能性が高くなります。この場合、Xサーバーにマウスイベントを要求する必要があります。 Qt、GTKとライブラリファイルGUIプログラムの作成に必要なマウス、キーボード、グラフィック、タイマー、その他の機能へのアクセスを提供する広く使用されているCライブラリ。 Ncurses同様の端末アプリケーションライブラリです。
ただし、システムをブラウズしている場合、または何らかの理由でXを使用できない場合、カーネルインターフェースでXがどのように機能するかは次のとおりです。
UNIXの哲学の重要なアイデアは、「すべてがファイルです」です。具体的には、ファイルの処理に使用されるのと同じシステムコールを介してできるだけ多くのコンテンツにアクセスする必要があります。したがって、マウスのカーネルインタフェースはデバイスファイルです。open()
電話をかけたりpoll()
、select()
着信データがあることを確認したり、read()
データを読み取ったりできます。
USB時代以前は、特定のデバイスファイルは通常シリアルポート(/dev/ttyS0
PS / 2ポートなど)でした/dev/psaux
。マウスに組み込まれているハードウェアプロトコルを使用してマウスと通信できます。今日/dev/input/*
、サブシステムは、さまざまな入力デバイスを処理するための統合されたデバイスに依存しない方法を提供するために好まれています。特に、/dev/input/mice
システムに接続されているすべてのマウスのイベントが提供され、/dev/input/mouseN
特定のマウスのイベントも提供されます。ほとんどの最新のLinuxディストリビューションでは、マウスを接続するとこれらのファイルが動的に生成されます。
マウスデバイスファイルから読み書きする内容の詳細については、次を参照してください。入力/input.txtカーネル文書から。具体的には、セクション3.2.2(mousedev)と3.2.4(evdev)とセクション4と5を参照してください。