Возможно ли встроить поддержку файловой системы непосредственно в приложение? - PullRequest
1 голос
/ 03 декабря 2011

Мне интересно, возможно ли написать приложение, которое получит доступ к чужой файловой системе, но без необходимости поддержки этой файловой системы из операционной системы.Например, я хотел бы написать приложение на C, работающее в Mac OS X, которое может просматривать / копировать файлы с диска, отформатированного в ext2 / ext3.Конечно, вам придется делать все переводы через приложение (а не через систему, использующую cp или Finder), но для моих целей это было бы нормально.Возможно ли это?

Ответы [ 4 ]

5 голосов
/ 03 декабря 2011

Существуют пользовательские библиотеки, которые позволяют вам получить доступ к файловым системам

Библиотека Linux-NTFS (libntfs) позволяет получать доступ к файловым системам NTFS, и существуют программы пользовательского пространства, такие как ntfsfix, для работы с файловой системой.

E2fsprogs делает то же самое для файловых систем ext2, ext3 и ext4.

Как упомянул Basile, Mtools - это еще один, который предоставляет доступ к разделам FAT.

Была даже программа, которая делает именно то, что вы ищете в Windows.Он называется ext2explore и позволяет получить доступ к разделам ext2 из Windows.

3 голосов
/ 03 декабря 2011

Это возможно. Например, утилита GNU mtools делает это (предполагая способ доступа к необработанному устройству или разделу) для файловых систем MS-DOS FAT.

Однако файловые системы внутри ядра обычно очень хорошо тестируются и оптимизируются.

0 голосов
/ 03 декабря 2011

Вы можете перехватить системные вызовы и вызовы библиотеки из своего приложения, а затем перенаправить чтение / запись во что-либо, например, в хранилище KV или на уровень распределенной БД (используя обычные вызовы для «виртуальных устройств», которые вы не поддерживаете).

Тогда возможности безграничны, потому что вам не нужно обращаться к физическим / виртуальным устройствам, когда кто-то их запрашивает (решение проблем с привилегиями).

0 голосов
/ 03 декабря 2011

Да и Нет. Для обычного пользователя Приложение обычно не возможно, потому что доступ к блочным устройствам ограничен только root. Каждое блочное устройство должно давать чтение / запись на необходимое блочное устройство для этого эффекта. В лучшем случае это потребует подхода сервера / клиента, когда служба запускается на компьютере и настраивается для предоставления разрешений для каждого блочного устройства.

Несколько более простой альтернативой было бы использование реализации MacFUSE.

Смотрите здесь:
http://code.google.com/p/macfuse/
http://groups.google.com/group/macfuse?pli=1

Проект MacFuse, похоже, больше не поддерживается, но может дать вам отправную точку для вашего проекта.

Грязный и быстрый подход выглядит как root chmod 666 /dev/diskN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...