c - 如何在 C Linux 中找出 HD 路径

标签 c linux

我正在用 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/

相关文章:

c - c中的简单二维数组,段错误(核心转储)

c - Linux客户端套接字: can't set O_NONBLOCK before connect?

c - OpenCV 获取/设置 IplImage RGB 值

linux - 无法在 Octave 3.8 Ubuntu 中安装 octave-forge 杂项包

linux - 使用 cifs 挂载

安卓系统。无法获取对 JVM 的引用

c - 使用 bsearch 其键值相当于数组元素,即指向 c 中 char 的指针

linux - Nginx 403 禁止 - Ubuntu

regex - 如何使用 grep 和正则表达式查找目录中的所有文件?

linux - 用于读取日志的 IP 表脚本