web-dev-qa-db-ja.com

sysfsから情報を取得する

ネットワークインターフェイスに関する情報をポーリングするためのスクリプトを作成しています。このため、_/sysfs_からデータを取得します。

インターフェースのすべての可能な状態を明確にしたいと思うまで、すべてがうまくいきました(どちらがそれらですか?私は今のところupdownunknownについてのみ知っています)。私は_/usr/src/linux/Documentation/sysfs-rules.txt_を通過し、これを見つけました:

/ sys/class/net/eth0/deviceへのアクセスはアプリケーションのバグです

これには理由がありますか? _/sysfs_から情報を取得して何か問題がある場合、誰かが私に説明してもらえますか?

_/sysfs_のすべてのインターフェイスを反復処理するのではなく、getifaddrs(3)を使用してすべてのネットワークインターフェイスを取得します。おそらくifaceステータスを取得する別の方法がありますか?ありがとう。

7
UVV

これは、使用することが想定されていないクラスディレクトリのdeviceリンクです。アイデアは、/sys/class/net/eth0/sys/devicesのどこかへのシンボリックリンクであり、deviceリンクが単に(グランド-)にリンクしているというものです。*親ディレクトリ; deviceリンクを使用する代わりに、必要に応じて親ディレクトリに戻る必要があります。

/sys/class/net/eth0/内のファイルへのアクセスは問題ありません。

/sys/class/net/eth0/operstateにある運用ステータスを参照している場合は、さらにいくつかあります。名前は net/core/net-sysfs.c で定義され、定数は include/uapi/linux/if.h で定義されます。それらは RFC 286 から来ています。