sysfsファイルにリスナーを関連付ける方法は?

sysfsファイルにリスナーを関連付ける方法は?

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は最新のシステムで使用されるパスです。

おすすめ記事