我正在用 C 语言开发一个系统,我可以在其中获取 SO 信息,例如内存、交换区等。
但是,我不知道机器有多少个硬盘,我需要知道如何找出机器的磁盘是什么以及该磁盘的路径是什么,例如/dev/sda 或/dev/sdb
我怎样才能做到这一点,但不使用popen()
或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*
的 block 设备都是硬盘驱动器,sr*
都是光盘驱动器。
在 Linux 上的 C 语言中,您可以使用 glob("/sys/block/s{d,r}*", ...)
找到这些符号链接(symbolic link)。或者,打开目录,枚举其内容并查找符号链接(symbolic link)。
按照符号链接(symbolic link),您可以找到有关该设备的更多信息。
关于c - 如何在 C Linux 中找出 HD 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009783/