【问题标题】:How to get current disk number/name which contains running Windows/Linux? [closed]如何获取包含正在运行的 Windows/Linux 的当前磁盘号/名称? [关闭]
【发布时间】:2015-10-26 10:46:23
【问题描述】:

假设一台 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++)当前会话中使用了哪个磁盘(活动的磁盘号/活动的设备名称)。在我的上下文中,活动磁盘是包含分区的磁盘,而分区又包含正在运行的操作系统。

【问题讨论】:

  • “活跃”在什么意义上?
  • 我真的无法理解你的问题。运行的软件通常可以访问当前安装在系统上的所有磁盘。我不认为一次只有一个“活跃”的概念。
  • 也许他们的意思是执行进程的磁盘?
  • @paddy 我对此表示怀疑,因为我们唯一的线索是它是“在当前会话中使用”的磁盘,这表明它的范围大于当前进程的范围。
  • 最接近的可能是“当前工作目录”,这是一个常见的概念。

标签: c++ linux windows winapi disk


【解决方案1】:

我担心你会被困在非常微软式的术语中。

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

而且 Unix 也不要求引导分区是“活动的”(即在分区表中标记为活动的)。

我经常在(虚拟)服务器上工作,我什至无法看到内核正在从中引导的分区,或者在引导过程后/boot 被卸载的系统。然后是Logical Volume Manager,此时事情变得真的很有趣......

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


如果您认为自己知道“操作系统”的组成部分,您可以检查挂载表以查找文件系统层次结构的特定部分位于哪个设备上。但是,mount 命令的输出格式和挂载表的任何文件引用的位置都是特定于平台的。 (/etc/mtabmount 在 Linux 上的输出是相同的,但是 /etc/filesystemsmount 在 AIX 上的输出却完全不同,两者都彼此不同事物的 Linux 版本.)

【讨论】:

  • 这里没有 "Microsoft-ish"。 Windows 可以在 RAID 配置中运行,并支持跨区卷。 Windows 可能驻留在也可能不驻留在单个物理磁盘上。
  • @IInspectable:但很清楚 OP 的原始想法来自哪里——Windows 的“活动”分区和 C: 驱动器。
猜你喜欢
  • 2015-11-20
  • 2020-03-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2016-03-28
  • 2022-11-01
相关资源
最近更新 更多