sysfs
ファイルの変更(例:)を監視/sys/class/net/eth0/statistics/operstate
し、コンテンツの変更に対してコマンドを実行するにはどうすればよいですか?
inotify
動作しませんsysfs
- 私は投票したくありません。コールバックルーチンを使用してリスナーを一度設定したいと思います。
ベストアンサー1
私はpaddingのソースコードを読みませんでしたが、operstate
通常sysfsからファイルを読み取ると、読み込んだバイトを返すカーネル側のいくつかのコードが実行されます。したがって、読まないとoperstate
「状態」はありません。値はどこにも保存されません。
sysfsファイルの変更を監視する方法
これは実際にはファイルではないため、「変更」という概念は存在しません。
おそらくあなたが望むことを達成するより良い方法があります!netlink
設計されました具体的にネットワークの状態を監視するタスクです。インターフェースが容易。たとえば、最小限に修正された次のサンプルコードでman 7 netlink
問題が解決された可能性があります。
struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = AF_NETLINK;
// Link state change notifications:
sa.nl_groups = RTMGRP_LINK;
fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
bind(fd, (struct sockaddr *) &sa, sizeof(sa));
通常、これがイーサネットレベルの接続ではなく、一部のIPネットワーク(またはインターネット)への接続に関するものである場合、systemd / NetworkManagerは最新のシステムで使用されるパスです。