【问题标题】:get physical hdd's list in c在c中获取物理硬盘的列表
【发布时间】:2012-03-18 13:15:51
【问题描述】:

各位,我需要获取Linux系统上C语言连接的硬盘列表:

例如,在连接了 2 个 IDE 磁盘和 1 个 SATA 磁盘的计算机上运行程序。

./a.out

需要输出:

/dev/hda
/dev/hdb
/dev/sda

帮助?

【问题讨论】:

标签: c linux hard-drive


【解决方案1】:

使用libsysfs,这是向内核查询各种附加设备的推荐方式。

【讨论】:

  • 我会检查一下.. 但我发现 'ls /sys/block/' 我认为这是一个很好的解决方案。我需要更标准的方式。谢谢!
【解决方案2】:
FILE *fp = popen("fdisk -l | grep \"Disk /\" | awk '{print $2};' | sed 's/://'", "r");
while(fgets(path, sizeof(path) -1,fp) != NULL)
//your code
pclose(fp);

【讨论】:

  • 这需要我的系统上的 root
  • @natinusala,如果用户在sudoers list 中,则在fdisk 之前使用sudo
  • 只是指出这一点,如果您希望代码可移植,则不应依赖需要root权限的代码
【解决方案3】:

最简单的方法是读取并解析/proc/partitions

【讨论】:

  • 这是我不想做的事情:D
【解决方案4】:

也许你可以参考fdisk的源代码。 关注本网站: ftp://ftp.gnu.org/gnu/fdisk

【讨论】:

    【解决方案5】:

    命令行
    "ls /sys/block/"

    将返回输出为:

    sda sdb sdc

    从那里,您可以创建一个脚本,将其通过管道传输到文件,然后将该文件作为数组或链表读入,以按照您认为合适的方式操作数据(例如在前面添加 /dev/列表中的所有设备名称)。

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 2012-02-06
      • 2011-10-31
      • 2011-06-01
      • 1970-01-01
      • 2011-05-04
      • 2013-02-25
      • 2013-03-01
      相关资源
      最近更新 更多