0

BusyBox Linux (カーネル 2.6.x) を実行する組み込み SoC があり、ネットワーク接続がダウンまたはアップしたときにタイムリーに監視するか、少なくとも通知する必要があります (他のイベントをキャッチすることは良いことですが、必須ではありません)。 .

私は長い間SOスレッドをグーグルで読んだり読んだりしてきましたが、特定のOSや月の満ち欠けなどで手元にある正確なタスクに応じて、さまざまな答えがあるようです.

私たちの具体的な基準は次のとおりです。

  • C プログラムの内部から見ているので、コマンド ライン呼び出しよりも C コードの方が適しています。
  • インターフェースは常にそこにありますが、それが稼働していること、または稼働していたことを保証することはできません (リンクupが.down
  • ポーリングする必要はなく、ステータス変更メッセージが発生したときに送信/キャッチする方がよいでしょう。カーネルはすでにドライバーからそのようなメッセージを受け取っていると思いますが、フックできるものがあるかどうかはわかりません。

考えられる回答をいくつかの候補に絞り込みましたが、どれが最も優れているかはわかりません (オーバーヘッドが最も少なく、信頼性が高く、将来のバージョンで壊れる可能性が最も低い):

  • cat sys/class/net/eth0/operstate
  • cat sys/class/net/eth0/carrier (これら2つの違いの良い説明が見つかりません)
  • ifreq またはさまざまな ioctl 呼び出しのシーケンスを使用して、ソケットのステータスを読み取ります (私にはちょっと厄介に見えます)
  • どういうわけかステータス変更メッセージをキャッチ???
4

1 に答える 1

0

inotify を使用して /sys/class/net/eth0/operstate をチェックできます。inotify を使用すると、指定したファイルまたはディレクトリで、CREATE、MODIFY、WRITE などのさまざまなイベントを監視できます。

ここで実際の例を見ることができます

于 2014-05-27T18:10:01.080 に答える