Filesystems
如何將偵聽器附加到 sysfs 文件?
如何監視
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 是您在現代系統上使用的路由。