Filesystems

如何將偵聽器附加到 sysfs 文件?

  • July 2, 2021

如何監視sysfs文件更改(如/sys/class/net/eth0/statistics/operstate)並在內容更改時執行命令?

  • inotify不工作sysfs
  • 我不想投票。我想設置一個帶有回調常式的偵聽器一次

我沒有閱讀填充的原始碼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 是您在現代系統上使用的路由。

引用自:https://unix.stackexchange.com/questions/656717