I use execv
to run lshw
command to get the CPU, disk, and memory in C code. But I would like to search another solution to get these information from /proc
or any other existed data. Have any suggestion? Here is my code:
char *params[9] = {"/usr/bin/lshw", "-short", "-c", "disk", "-c", "memory", "-c", "processor", 0}; //cmd params filled execv(params[0], params);
Linux command: $ 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
I have two questions:
- Where to find a guide to parse the files in
/proc
to get these hardware information? - Do I need to trace the source code of
lshw
to find what doeslshw
do?
Edit:
Chapter 7 of Advanced Linux Programming is a guide to parse the /proc
filesystem.
Advertisement
Answer
By reading the source code of lshw
, I found that lshw
read raw data from /sys/class/dmi/
. Because lshw
is written in CPP that I am not familiar with, there is a question Where does dmidecode get the SMBIOS table? mentioned that dmidecode.c
read raw data from /sys/class/dmi
that’s same as lshw
does.
Here are the definitions in dmidecode.c
#define SYS_ENTRY_FILE "/sys/firmware/dmi/tables/smbios_entry_point" #define SYS_TABLE_FILE "/sys/firmware/dmi/tables/DMI"
I extract code from dmidecode.c
to get the CPU and memory information, and use lsscsi
to get disk information.
Thanks for your help.