2011-06-23 12 views
0

私はコンピュータが稼働しているときに常に実行されるプログラムを持っています。それはシリアルUSBデバイスとのインターフェイス。時には、コンピュータの電源が入っているときにデバイスが存在しないことがあります。/dev/ttyUSB *が開いたときに開く

私の質問は、デバイスファイルが存在するようになったときに肯定応答する良い方法です。私はファイル名を知っていると仮定してファイルを継続的にチェックする無限ループを作ることができます。しかし、これよりも良い方法がありますか?

さらに、プログラムの実行中にデバイスの電源が入っていないとすれば、私のfdは無効になります。これが発生したときにイベントやエラーがスローされるので、デバイスファイルが再度存在するまで再度チェックを開始できますか?

私はfdからselectループを使って読みます。

答えて

0

歴史的に、ポーリングの解決策(前記「ファイル」がある間隔で存在するかどうかを判断するループ)は、「最良の」ものであろう。現代のLinux(2.6.12以上、あなたが指定していないが)を使用している場合は、inotifyを使用することができます。これはおそらくファイルの作成のためにディレクトリを監視します(IN_CREATE)。私がリンクしているWikipediaの記事は、非常に良い概要と役立つリンクを提供します。

プラグが抜かれている部分はトリッキーです。ファイルが* nix(forever-agoに戻る)で削除されると、そのファイル記述子は依然として有効です。したがって、私はextern int errno;があなたの解決策かもしれないと思います。あなたの投稿は "C"でタグ付けされているので、 "スロー"するものはありませんが、read(または何でも)呼び出しが失敗したときにこれをチェックすると、洞察が得られます。

libudevもチェックしてください。libudevはもちろん、「すべてはファイルです」という考え方ではなく、デバイス固有のものです。

2

udevを使用すると、デバイスのプラグインまたは取り外し時にアプリケーションに通知することができます。 udev-notify

libudev APIは、デバイスが利用可能になったとき、またはそれが削除されるときに、あなたが行うことを決定することができますが、イベントをカーネルにして通知されることを聞くようになります。この通知を見て偉大例えば

そのような出来事が起こったとき。

関連する問題