Что касается файловой системы, то в Unix/Linux нет концепции дисков (не могу поручиться за MacOSX, но я бы сказал, что это то же самое). Ближе всего, вероятно, будут точки монтирования, но нормальное приложение не должно беспокоиться о них, поскольку все уже доступно в корневом каталоге файловой системы /
(отсюда поведение QDir::drives()
, которое вы наблюдаете).
Если вы действительно хотите увидеть, какие точки монтирования используются, вы можете проанализировать вывод команды mount
(без каких-либо аргументов) или, по крайней мере в Linux, содержимое файла /etc/mtab
. Однако будьте осторожны, точки монтирования могут очень быстро стать довольно сложными (петлевые устройства, файловые системы FUSE, общие сетевые ресурсы и т. д.), поэтому, опять же, я бы не рекомендовал их использовать, если ваше приложение не предназначено для их администрирования.
Имейте в виду, что в ОС Unix-y точками монтирования обычно занимаются системные администраторы, а не конечные пользователи, если только мы не говорим о съемных носителях или временных сетевых ресурсах.
Изменить: После ваших разъяснений в комментариях в Linux вы должны использовать getmntent
или getmntent_r
, чтобы проанализировать содержимое файла /etc/mtab
и таким образом получить список всех точек монтирования и соответствующих устройств.
Хитрость после этого заключается в том, чтобы определить, какие из них вы хотите отображать (съемные? сетевой ресурс?). Я знаю, что /sys/block/...
может помочь с этим, но я не знаю всех деталей, так что вам придется копать еще немного.
Например, чтобы проверить, является ли /dev/sdd1
(USB-ключ), подключенный к /media/usb0/
, съемным устройством, вы можете сделать (обратите внимание, что я использую имя устройства sdd
, а не имя раздела sdd1
):
$ cat /sys/block/sdd/removable
1
В отличие от моего основного жесткого диска:
$ cat /sys/block/sda/removable
0
Надеюсь, это поставит вас на правильный путь.
person
syam
schedule
03.09.2013