5

Linux で次の状況を想定します。

プロセスは、USB シリアル コンバータ デバイスから継続的に読み取りを行っています ( /dev/ttyUSB0)。そのデバイスが突然取り外され、再び差し込まれます (または、何らかの理由でデバイス自体がリセットされます)。プロセスは引き続き有効なファイル ハンドルを保持します/dev/ttyUSB0が、プロセスがデバイスを再度開かない限り、デバイスからデータを受信しません ( udevがデバイス ノードを削除して再作成したため)。

プロセスがデバイスを再度開く必要があることを認識できるように、そのような状況を検出する直接的な方法はありますか (つまり、データ フローのタイムアウトを検出することによって間接的にではありません)。/dev/ttyUSB0を使用して変更時間を監視することは信頼できstat()ますか?

追加の詳細:

このプロセスでは、標準open()関数を使用してデバイス ファイルを開きます。

/devによってtmpfs制御されudevます。

注:私はこれにudevルールを使用したくなく、プロセスに直接実装されたソリューションを好みます。

4

3 に答える 3

1

USB デバイスがホットアンプラグされている場合、デバイスでの操作は-EIO;で失敗し始めます。これを検出して、適切なアクションを実行できます。

于 2011-06-30T18:42:27.440 に答える
1

デバイス ノードが実際に削除され、再作成されている場合 (udev を使用している場合はそうなると思います)、inode 番号を使用して、これがいつ発生したかを知ることができるはずです。

fstat()開いているファイル記述子 on をstat()呼び出して、2 つの のフィールドを/dev/ttyUSB0比較するだけです。st_inostruct stat

そして、それが実際に機能するかどうかを教えてください。:-)

于 2011-06-30T18:56:37.623 に答える
0

これらのイベントを検出すると思いFAMます。gamin

于 2011-06-30T18:15:41.297 に答える