【发布时间】:2017-11-07 01:12:01
【问题描述】:
我使用execv 运行lshw 命令以C 代码获取CPU、磁盘和内存。但我想搜索另一种解决方案以从/proc 或任何其他现有数据中获取这些信息。有什么建议吗?这是我的代码:
char *params[9] = {"/usr/bin/lshw", "-short", "-c", "disk",
"-c", "memory", "-c", "processor", 0}; //cmd params filled
execv(params[0], params);
Linux 命令:$ sudo lshw -short -c disk -c processor -c memory
$ sudo lshw -short -c disk -c processor -c memory
H/W path Device Class Description
======================================================
/0/0 memory 64KiB BIOS
/0/22 memory 16GiB System Memory
/0/22/0 memory DIMM Synchronous [empty]
/0/22/1 memory DIMM Synchronous [empty]
/0/22/2 memory 8GiB DIMM Synchronous 2133 MHz (0.5 ns)
/0/22/3 memory 8GiB DIMM Synchronous 2133 MHz (0.5 ns)
/0/2a memory 256KiB L1 cache
/0/2b memory 1MiB L2 cache
/0/2c memory 6MiB L3 cache
/0/2d processor Intel(R) Xeon(R) CPU D-1521 @ 2.40GHz
/0/1/0.0.0 /dev/sda disk 16GB SATADOM-SH 3IE3
/0/2/0.0.0 /dev/sdb disk 120GB Patriot Blaze
我有两个问题:
- 在哪里可以找到解析
/proc中文件的指南以获取 这些硬件信息? - 是否需要追踪
lshw的源代码才能找到lshw的作用?
编辑:
Advanced Linux Programming 的第 7 章是解析/proc 文件系统的指南。
【问题讨论】:
-
阅读源代码比跟踪二进制文件更好。
-
@jww 我的问题是关于如何在纯 C 代码编程中做到这一点。
-
@Charles - 很抱歉。我应该更加注意。这可能对您的任务有所帮助:lshw filetype:c.
-
部分信息在
/sys/下,不仅在/proc/下 -
@BasileStarynkevitch,是的,你是对的。我刚刚发现
lshw从/sys/firmware/dmi/tables/读取原始数据,和dmidecode一样。dmidecode在 C 中,C 对我来说比 CPP 中的lshw容易。