如何在C Linux中找出高清路径

时间:2013-09-25 16:00:59

标签: c linux

我正在用C开发一个系统,在那里我可以获得SO信息,如内存,交换等。

但是,我不知道机器有多少硬盘,我需要知道如何弄清楚机器的磁盘是什么,以及该磁盘的路径是什么,比如/ dev / sda或/ dev / SDB

我该怎么做,但不使用popen()system()

我尝试使用statfs(),但是我没有得到预期的结果。

有人知道我该怎么做?

感谢。

1 个答案:

答案 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}*", ...)来查找这些符号链接。或者,打开目录,枚举其内容并查找符号链接。

在符号链接后,您可以找到有关该设备的更多信息。