使用 C/C++ 处理 sysfs 内容的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 C/C++ 处理 sysfs 内容的最佳方法是啥?【英文标题】:What is the best way to process the content of sysfs using C/C++?使用 C/C++ 处理 sysfs 内容的最佳方法是什么? 【发布时间】:2011-01-12 20:14:09 【问题描述】:Linux 内核使用 /sys 中的 sysfs 文件系统公开有关当前环境的信息。我有兴趣获取有关在线 CPU 及其内存层次结构(1 级到 3 级缓存)的信息。
由于所有这些信息基本上都是文本文件,我可以自己编写解析器,但我很好奇在 sysfs 中处理信息的最佳方式是什么。目前我找到了两种选择:
libsysfs
和
libudev
libsysfs
的缺点似乎是代码现在已经快 5 年了,几乎没有可用的文档,libudev
似乎更活跃但文档很少。我在libudev
上只找到了一个有用的教程——http://www.signal11.us/oss/udev/
在 C/C++ 中处理来自 sysfs 的内容的最先进方法是什么?
[更新]
目前无法访问存储在/sys/devices/system
中的数据,因为暴露的信息不是真实设备。访问这些数据的唯一方法是手动进行。
【问题讨论】:
既然你用unix-programming
标记了这个,awk
有可能吗?在文本解析方面,这似乎是阻力最小的路径。
前段时间我也在为此寻找一些东西,最后放弃并写了我自己的,因为我意识到在所有文件中,我真的只对特定的一点感兴趣的信息,所以开销是不值得的......
【参考方案1】:
内核作者发布了sysfs-rules.txt,其中解释了必须如何使用 sysfs。他们特别指出
不要使用 libsysfs
【讨论】:
按照上述说明,我与libudev
合作过,不幸的是它没有在/sys/devices/system
中列出设备/子系统,这种行为是否有特殊原因?【参考方案2】:
穿着你的鞋子,我可能会编写自己的库。由于这些库可能不(也可能不会)满足您的所有要求。 fstream ftw。
【讨论】:
以上是关于使用 C/C++ 处理 sysfs 内容的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nuxt 处理登录\注销按钮以避免闪烁内容的最佳方法是啥?
在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?