gpt4 book ai didi

c++ - 在 Linux 和 Mac OS X 上检测已安装的驱动器

转载 作者:IT王子 更新时间:2023-10-29 00:48:43 26 4
gpt4 key购买 nike

我正在使用 QDir::drives() 获取驱动器列表。它在 Windows 上运行良好,但在 Linux 和 Mac 上它只返回单个项目“/”,即。 e.根。这是预期的行为,但如何在 Mac 和 Linux 上获取驱动器列表?

也欢迎使用非 Qt 原生 API 解决方案。

关于“驱动器”定义的澄清:我想获得在 Finder 或 Linux 内置文件管理器中显示为“驱动器”的挂载点列表。

最佳答案

就文件系统而言,Unix/Linux 中没有驱动器的概念(我不能保证 MacOSX,但我会说它是一样的)。最接近的可能是挂载点,但普通的应用程序不应该为它们烦恼,因为所有这些都已经在文件系统根 / 下可用(因此 QDir::drives() 的行为 你观察到的)。

如果您确实想查看正在使用的挂载点,您可以解析 mount 命令的输出(不带任何参数),或者,至少在 Linux 上, 的内容>/etc/mtab 文件。但请注意,挂载点可能会很快变得非常复杂(循环设备、FUSE 文件系统、网络共享等),因此,我再次建议不要使用它们,除非您的应用程序旨在管理它们。

请记住,在 Unix-y 操作系统上,挂载点通常是系统管理员的事,而不是最终用户的事,除非我们说的是可移动媒体或临时网络共享。


编辑:根据您在评论中的说明,在 Linux 上您应该使用 getmntent or getmntent_r解析/etc/mtab文件的内容,从而得到所有挂载点和对应设备的列表。

之后的技巧是确定要显示哪些(可移动?网络共享?)。我知道 /sys/block/... 可以帮助解决这个问题,但我不知道所有的细节,所以你必须再深入一点。

例如,要检查安装在 /media/usb0/ 上的 /dev/sdd1(USB key )是否是可移动设备,您可以这样做(注意如何我使用设备名称sdd,而不是分区名称sdd1):

$ cat /sys/block/sdd/removable
1

相对于我的主硬盘:

$ cat /sys/block/sda/removable
0

希望这能让您走上正轨。

关于c++ - 在 Linux 和 Mac OS X 上检测已安装的驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com