我正在用C开发一个系统,在那里我可以获得SO信息,如内存,交换等。
但是,我不知道机器有多少硬盘,我需要知道如何弄清楚机器的磁盘是什么,以及该磁盘的路径是什么,比如/ dev / sda或/ dev / SDB
我该怎么做,但不使用popen()
或system()
。
我尝试使用statfs(),但是我没有得到预期的结果。
有人知道我该怎么做?
感谢。
答案 0 :(得分:4)
您可以尝试从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}*", ...)
来查找这些符号链接。或者,打开目录,枚举其内容并查找符号链接。
在符号链接后,您可以找到有关该设备的更多信息。