如何将侦听器附加到 sysfs 文件?

Zet*_*tor 2 filesystems sysfs inotify linux-kernel async

如何监视sysfs文件更改(如/sys/class/net/eth0/statistics/operstate)并在内容更改时执行命令?

  • inotify 不起作用 sysfs
  • 我不想投票。我想设置一个带有回调例程的侦听器一次

Mar*_*ler 5

我没有阅读 populates 的源代码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));
Run Code Online (Sandbox Code Playgroud)

通常,如果这不是关于以太网级别的连接,而是与某些 IP 网络(或互联网)的连接,那么 systemd/NetworkManager 是您在现代系统上使用的路由。

  • 你不能。这就是我在第一句话中所说的。同样,它们 ** 不是 ** 文件。你不能“听”你必须*发起*的东西。 (3认同)