デバイスが割り込みを発生するタイミングをプログラムで検出する方法は?

デバイスが割り込みを発生するタイミングをプログラムで検出する方法は?

デバイスが割り込みを発生させると、プログラムでどのように検出できますか?これは、デバイスが接続または切断されたときに発生する可能性があります。

次のような状況もあります。たとえば、指紋スキャナに指を当てると割り込みが発生します。この割り込みをどのように検出して捕捉できますか?

イベントが発生した場合(CD挿入やペンドライブの挿入など)、これらのデバイスで発生した割り込みをキャプチャし、それを使用してアプリケーションでこれらのデバイスに関連するタスクを実行できるように、Gtkmmを使用してアプリケーションを作成したいと思います。

Gtkmmで実行できない場合は、低レベルで割り込みを取得してGtkmmアプリケーションに通知できますか?

GPartedがどのように機能するかを確認しています。最初に表示され、/dev/sdaペンドライブを接続すると、自動的にfilesアプリが開きました。 GPartedを確認すると、デバイスのドロップダウンメニューにペンドライブは存在しません。 GPartedメニューで「デバイスの更新」または+を選択した場合Ctrlにのみ表示されますR

ベストアンサー1

より低いレベルで割り込みを捕捉し、gtkmmアプリケーションに通知することができます。

いいえ、それはカーネル空間活動。幸いなことに、カーネルはユーザースペースからアクセスできるインターフェースを介して特定のイベントの結果を報告します。

あなたの質問は、ブロックデバイスが接続されているのか、ファイルシステムがマウントされているのかを検出したい(電子に向かって傾いているように見えますが)、少しあいまいです。システムが自動マウント(通常はデフォルト)を使用している場合は、ブロックデバイスが接続されているときにファイルシステムをマウントします。それ以外の場合は、手動で行う必要があります(例:を使用してmount)。

どちらにしてもカーネルをポーリング/構文解析/スキャンしたいです。ファイルノードインターフェイスに基づいています。私は以前/dev/に接続されたブロックデバイスとマウントされたファイルシステムを渡して追跡するアプリケーション(実際にはC ++ GTKアプリケーション)でこれを行ったことがあります/etc/mtab。これは言語に拘束されない簡単なアプローチです。一部の人はこれがファイル/ディレクトリの読み取りを含むため、最初は少し不快だと思うかもしれませんが、これらのインターフェイスは実際にはディスクには存在しないため、過度のI / Oオーバーヘッドがなく、システムコールであるread()ことを覚えておいてください。カーネルインタフェースからファイルノードを読み取ることは、listAttachedDevices()言語に依存しないことを除いて、スタイルAPIと同じです。これらのノードからデータを読み取ると、カーネルはそのノードが表す情報を直接渡します。

この/devディレクトリには、接続されているデバイスが特別なデバイスノードファイルとして一覧表示されます/dev/sda。たとえば、デバイスが接続および切断されると、カーネルによって追加および削除されるため、定期的に(たとえば5秒ごとに)ポーリングして追跡すると、新しいデバイスとデバイスノードを検出できます。削除されたコンテンツ。ここで唯一の複雑なことは、コールバックスタイルのAPIがないため、実際に継続的に確認するにはそれに対して独自のスレッドを作成する必要があることです(なぜgpartedクリックする必要があるかもしれませんRefresh Devices)。

より良い選択肢/devは、と(以下を参照)の間にかなりの違いがあるか、後者のノードに次のものが含まれていることに/sys/block注意してください。/dev/proc/sys関連情報デバイスのようなもの、ノード/devデバイスへの実際の接続(したがってスキャンする場合は、/dev個々のファイルを読み取るのではなく、ファイルが存在することに注意してください。)

/etc/mtab今はシンボリックリンク(参照)-s;はカーネルインタフェースの主なスイス軍用ナイフです(参考資料を参照)。このリストman ln/proc/self/mounts/procman procマウントされたファイルシステム;自動マウントを使用すると、物を接続/分離すると物が現れて消えます。/procとの情報は/sys通常ASCIIテキスト形式であるため、catなどを使用してこれらのファイルを表示し、string(stream)関数を使用して解析できます。

WRTは、他の種類のデバイス(指紋スキャナなど)のための/sys良い開始点です。とディレクトリが/sys/dev含まれています。ブロック装置は通常、その装置に関する情報を記憶する。blockcharランダムアクセス。 Charデバイスは、スキャナ、カメラ、HIDデバイス(マウスやキーボードなどのヒューマンインターフェイスデバイス)を含む、ストリーム形式でシステムと情報を交換します。私はgtkmmですちょっと豪華なもの追加のHIDエントリは、おそらくGUIとの対話に重要であるためです。

おすすめ記事