代码之家  ›  专栏  ›  技术社区  ›  ilya

如何获取包含运行Windows/Linux的当前磁盘号/名称?[已关闭]

  •  -3
  • ilya  · 技术社区  · 10 年前

    让我们假设一台PC包含多个存储设备,我们有C++/Qt实用程序,它包含2个黑盒函数(我们不考虑它们的实现):

    QString get_disk_serial(int drive_number); //for Windows 
    
    QString get_disk_serial(const QString& device); //for Linux. For example, "/dev/sda"
    

    我需要知道(使用C++)当前会话中使用了哪个磁盘(活动的磁盘号/活动的设备名称)。在我的上下文中,活动磁盘是包含分区的磁盘,而分区又包含正在运行的操作系统。

    1 回复  |  直到 10 年前
        1
  •  4
  •   DevSolar    10 年前

    我担心你陷入了微软式的思维。

    “带有操作系统的分区”在Unix机器上意义不大。你有 /boot 对于内核图像, /usr 使用用户空间工具和库, /opt 使用可选的用户空间工具/libs, /etc 有了所有的设置……你需要所有这些(嗯,也许除了 /选择 ),他们 可以 位于单独的分区上。哪一个是“操作系统”?

    Unix也不要求启动分区为“活动”(即分区表中标记为活动)。

    我经常在(虚拟)服务器上工作,而我甚至无法 看见 引导内核的分区,或系统 /靴子 在启动过程后卸载。然后是 Logical Volume Manager ,在这一点上 真正地 有趣的

    总而言之,在MS Windows之外,“活动分区”根本没有意义。(也许现在已经不存在了。)即使是AmigaOS,早在1985年也可以轻松地分布在多个卷上……(“请在任何驱动器中插入卷LIBS。”)


    如果您认为您知道什么是“操作系统”的答案,您可以检查装载表,以查找文件系统层次结构的特定部分所在的设备 mount 但是,命令和装载表的任何文件上引用的位置是特定于平台的。( /etc/mtab 以及 攀登 在Linux上是相同的,但是 /etc/filesystems 以及 攀登 在AIX上,两者都非常不同 Linux版本的东西。)