来学期までに例題で学びたいし、OSと連動するものを試してみたい。
C プログラムはどのようにして OS からの入力をインターセプトできますか。私が思いつく唯一の例は、キーロガーです。
オペレーティングシステムを掘り下げるようにCプログラムをどのようにプログラムできますか?
これは理にかなっていますか?
来学期までに例題で学びたいし、OSと連動するものを試してみたい。
C プログラムはどのようにして OS からの入力をインターセプトできますか。私が思いつく唯一の例は、キーロガーです。
オペレーティングシステムを掘り下げるようにCプログラムをどのようにプログラムできますか?
これは理にかなっていますか?
Linux では、すべてのキーボードのデバイス ノードを監視し、受信したイベントを記録できます。
/dev/input/event*
ノードは一般的なインターフェイスを提供します - マウスまたはキーボードに対応するノードを監視する必要があります。evdev
これを利用するにはカーネルモジュールが必要です。
ヘッダー ファイルには、プログラミング インターフェイスについて知っておく必要のあるほとんどの/usr/include/linux/input.h
情報が含まれています。私の経験から、それは非常に簡単で使いやすいです。
一部の X サーバー ドライバーはデバイス ノードを取得し、他のすべてのアプリケーションがイベントを取得するのをブロックすることに注意してください。そのため、オプションを変更するか、X ベースのインターフェイスも使用する必要があります。
これは、カーネル モジュールを作成せずに Linux で取得できる範囲とほぼ同じだと思います。
編集:
各 OS には、入力サブシステム用の独自のインターフェイスがあることに注意してください。これを行うクロスプラットフォームの方法はありません。正確に何をしたいですか?
基本的に、OS によっては、OS のイベント メカニズムに「フック」する必要があります。OS ではさまざまなイベントが発生しており、キーの押下はマウス クリックと同様のイベントです。これらのイベントにフックして、イベントが発生するたびに OS が呼び出す関数を提供することができます。
たとえば、Windows の場合を参照してください