我正在用 C 语言开发一个系统,我在其中获取 SO 信息,例如内存、交换等。
但是,我不知道这台机器有多少个硬盘,我需要知道我怎样才能知道机器的磁盘是什么以及该磁盘的路径是什么,例如 /dev/sda 或 /dev/sdb
我怎么能这样做,但没有使用popen()
or system()
。
我尝试使用 statfs(),但没有得到预期的结果。
有人知道我该怎么做吗?
谢谢。
您可以尝试从 sysfs 获取该信息,例如:
$ ls -l /sys/block/s{d,r}*
lrwxrwxrwx 1 root root 0 Sep 25 09:33 /sys/block/sda -> ../devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 Sep 25 09:33 /sys/block/sdb -> ../devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:0/2:0:0:0/block/sdb
lrwxrwxrwx 1 root root 0 Sep 25 17:06 /sys/block/sr0 -> ../devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sr0
以上假设任何匹配 glob 的块设备sd*
都是硬盘驱动器和sr*
光盘驱动器。
在 Linux 上的 C 中,您可以使用它glob("/sys/block/s{d,r}*", ...)
来查找这些符号链接。或者,打开目录,枚举其内容并找到符号链接。
按照符号链接,您可以找到有关该设备的更多信息。