如何使用C++列出连接到Linux机器的硬盘?

5

我需要使用C++列出连接到Linux机器的硬盘驱动器。

是否有可用的C或C++函数可以完成此操作?


1
是的,我已经检查过了,但是我找不到任何资源。 - balu
1
只是澄清一下,您想列出已连接或已挂载的硬盘吗?Linux与系统使用文件系统有非常好的接口。请查看目录“/dev/disk”。 - André Puel
1
列出已连接或已挂载的硬盘即可。 - balu
4个回答

9

看看我做的这个简单的/proc/mounts解析器。

#include <fstream>
#include <iostream>

struct Mount {
    std::string device;
    std::string destination;
    std::string fstype;
    std::string options;
    int dump;
    int pass;
};

std::ostream& operator<<(std::ostream& stream, const Mount& mount) {
    return stream << mount.fstype <<" device \""<<mount.device<<"\", mounted on \""<<mount.destination<<"\". Options: "<<mount.options<<". Dump:"<<mount.dump<<" Pass:"<<mount.pass;
}

int main() {
    std::ifstream mountInfo("/proc/mounts");

    while( !mountInfo.eof() ) {
        Mount each;
        mountInfo >> each.device >> each.destination >> each.fstype >> each.options >> each.dump >> each.pass;
        if( each.device != "" )
            std::cout << each << std::endl;
    }

    return 0;
}

7

不用担心,伙计。如果它做你想要的事情,请记得将其标记为答案 :) - Peter Short

5

虽然不是函数,但是您可以从/ proc/partitions读取活动内核分区,或者从/sys/block的目录列表中列出所有块设备。


0

没有标准的C或C++函数可以做到这一点。您需要一个API。 但是您可以使用:

system("fdisk -l");

2
那么fdisk是如何做到的呢?你认为fdisk是用哪种语言编写的? - static_rtti
1
@static_rtti 在 fdisk 上运行 strace。看起来它打开 /proc/partitions 来获取设备列表,然后只读方式打开每个设备文件并尝试从每个设备读取分区表... FWIW - tMC
不要解析fdisk输出,也不要解析任何命令。它可能已被翻译成用户的本地语言或具有不稳定的输出。 - Salamandar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接