使用 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 位浮点的最佳方法?

混合开发环境

确定两个路径是不是引用 Windows 中同一文件的最佳方法?

处理嵌套节点的最佳方法(不同的名称,相同的内容)

在 C/C++ 项目中自动检测库依赖关系的最佳方法是啥?