【问题标题】:How to list the harddisks attached to a Linux machine using C++?如何使用 C++ 列出连接到 Linux 机器的硬盘?
【发布时间】:2011-11-06 19:45:47
【问题描述】:

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

是否有任何可用的 C 或 C++ 函数来执行此操作?

【问题讨论】:

  • 是的..我已经检查过,但我找不到任何资源
  • 只是为了消除歧义,您要列出连接或挂载的硬盘吗? Linux 与使用文件系统的系统有一个非常好的接口。请查看目录“/dev/disk”。
  • 列出挂载或挂载的硬盘就足够了。

标签: c++ linux hard-drive hardware-interface


【解决方案1】:

看看我制作的这个简单的 /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;
}

【讨论】:

    【解决方案2】:

    你可以使用 libparted

    http://www.gnu.org/software/parted/api/

    ped_device_probe_all() 是检测设备的调用。

    【讨论】:

    • 我会试试这个并告诉你。谢谢你的建议
    • 别担心,伙计。如果它符合您的要求,请记住将其标记为答案:)
    【解决方案3】:

    它不是一个函数,但你可以从 /proc/partitions 读取活动的内核分区或从 /sys/block 的 dir 列表中列出所有块设备

    【讨论】:

      【解决方案4】:

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

      system("fdisk -l");
      

      【讨论】:

      • 那么 fdisk 是怎么做的呢?你认为 fdisk 是用什么语言编写的?
      • @static_rtti 在 fdisk 上运行 strace。看起来它打开 /proc/partitions 以获取设备列表,然后打开每个设备文件 RO 并尝试从每个设备读取分区表... FWIW
      • 不,不要解析 fdisk 输出或任何命令。它可能会被翻译成用户的语言环境或有不稳定的输出。
      猜你喜欢
      • 2010-11-01
      • 2014-03-21
      • 2012-07-04
      • 2021-06-25
      • 2010-11-24
      • 2012-01-21
      • 2016-09-04
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多