假设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 ++)当前会话中使用的磁盘(活动的磁盘编号/活动的设备名称)。在我的上下文中,活动磁盘是一个包含分区的磁盘,而该分区又包含正在运行的操作系统。
答案 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/filesystems
和mount
的输出完全不同,彼此和< / em> Linux版本的东西。)