簡體   English   中英

在Linux和Mac OS X上檢測已安裝的驅動器

[英]Detecting mounted drives on Linux and Mac OS X

我正在使用QDir::drives()來獲取驅動器列表。 它在Windows上運行良好,但在Linux和Mac上它只返回單個項目“/”,即root。 這是預期的行為,但我怎樣才能獲得Mac和Linux上的驅動器列表?

非Qt原生API解決方案也受到歡迎。

關於“驅動器”定義的澄清:我想得到一個在Finder或Linux內置文件管理器中作為“驅動器”可見的掛載點列表。

就文件系統而言,Unix / Linux中沒有驅動器的概念(我不能擔保MacOSX,但我會說它是相同的)。 最接近的事可能會被掛載點,但一個正常的應用程序不應該理會他們,因為所有文件系統的根目錄下已經可用/ (的,因此行為QDir::drives()你觀察)。

如果您真的想要查看正在使用的掛載點,則可以解析mount命令的輸出(不帶任何參數),或者至少在Linux上解析/etc/mtab文件的內容。 請注意,掛載點可以快速實現(循環設備,FUSE文件系統,網絡共享......),因此,除非您的應用程序旨在管理它們,否則我不建議使用它們。

請記住,在Unix-y操作系統上,掛載點通常是系統管理員而不是最終用戶的問題,除非我們談到可移動媒體或瞬態網絡共享。


編輯:在評論中澄清之后,在Linux上,您應該使用getmntentgetmntent_r來解析/etc/mtab文件的內容,從而獲得所有掛載點和相應設備的列表。

之后的訣竅是確定要顯示哪些(可移動?網絡共享?)。 我知道/sys/block/...可以幫助解決這個問題,但我不知道所有細節,所以你需要多挖一點。

例如,要檢查/media/usb0/上安裝的/dev/sdd1 (USB密鑰)是否是可移動設備,您可以這樣做(注意我如何使用設備名稱sdd ,而不是分區名稱sdd1 ):

$ cat /sys/block/sdd/removable
1

與我的主硬盤相反:

$ cat /sys/block/sda/removable
0

希望這能讓你走上正軌。

對於OS X, 磁盤仲裁框架可用於列出和監視驅動器和掛載點

刮掉mount shell命令的輸出肯定是任何一個平台上的一個選項 - 盡管你在這里定義了什么驅動器? 物理媒體,可移動驅動程序,網絡卷? 你需要做很多過濾。

在MacOSX上,可移動媒體,網絡卷和輔助硬盤驅動器的安裝點始終位於/Volumes/之下,因此,如果您對驅動器的定義很寬泛,只需枚舉此目錄中的項目即可。 這應該是相當安全的,因為它們都是自動安裝的。

在Linux上,根據使用的特定發行版,有多種位置。 /mnt/是傳統的,但還有其他的。

在linux中,獲取當前掛載的驅動器信息的方法是解析mtab文件。 glibc提供了一個宏_PATH_MNTTAB來定位這個文件。 請參閱http://www.gnu.org/software/libc/manual/html_node/Mount-Information.html#Mount-Information

如果您知道有問題的驅動器/驅動器的格式,則可以使用df命令從控制台輸出驅動器列表,或者以編程方式輸出系統命令。 例如,要查找所有ext4驅動器:

df -t ext4

如果您對多種類型感興趣,可以在同一命令中添加其他格式:

df -t ext4 -t tmpfs

這將返回驅動器的物理位置,它具有的內存量,使用的內存量,可用內存量,使用%以及它在文件系統上的安裝位置。

df將向您顯示系統上安裝的所有驅動器,但有些驅動器將是您正在尋找的不是臨時文件系統等的東西。

不確定這是否適用於OSX,但它確實適用於我的Ubuntu 12.04發行版。

另一種方法是檢查“卷”

df -H | grep“/ Volumes”

我知道這是舊的,但它沒有提到我最終在macos中使用的getfsstat 您可以使用getfsstat獲取安裝列表(包括大多數磁盤)。 有關詳細信息,請參閱man 2 getfsstat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM