如何获取包含运行Windows / Linux的当前磁盘编号/名称?

时间:2015-08-04 06:40:08

标签: c++ linux windows winapi disk

假设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 个答案:

答案 0 :(得分:4)

我担心你会受到非常微软的思考。

“具有操作系统的分区”在Unix机器上没什么意义。你有/boot内核映像,/usr有用户空间工具和库,/opt有可选的用户空间工具/库,/etc有所有设置......你需要所有这些(好吧,除了/opt之外),他们可以位于各个分区上。哪一个是“操作系统”?

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

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

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

如果您认为您知道构成“操作系统”的内容的答案,则可以检查安装表以查找文件系统层次结构的特定部分所在的设备。但是,mount命令的输出格式和安装表的任何文件引用的位置都是特定于平台的。 (/etc/mtab和Linux上mount的输出是相同的,但AIX上/etc/filesystemsmount的输出完全不同,彼此和< / em> Linux版本的东西。)