Подтвердить что ты не робот

Разработка "Файловых систем" для Linux, Mac, Windows

Какие технологии используют такие приложения, как dropbox (http://www.dropbox.com/) и expandrive (http://www.expandrive.com/mac) для создания функциональности прямо в локальных файловых системах на каждой платформе? Может ли кто-нибудь предложить что-нибудь, что позволит максимально использовать повторное использование кода на всех основных платформах?

Я только изучал FUSE на Linux, и мне нравится то, что я вижу.

4b9b3361

Ответ 1

Реализация виртуальной файловой системы очень специфична для ОС. Причина в том, что архитектура драйверов отличается в Unix-подобной ОС и в Windows.

Чтобы не писать собственный драйвер, вы можете использовать инструментарий файловой системы пользовательского режима. В Linux, BSD и MacOS существуют FUSE и OSXFUSE (fork неактивного MacFUSE) соответственно. В Windows используется Система обратного вызова.

В настоящий момент Dropbox не имеет виртуальной файловой системы, а только расширение оболочки (afaik они планировали создать виртуальный диск, но я не знаю, что они решили).

Относительно того, как отслеживаются изменения файлов: существует несколько методов. Простейшим является сканирование каталога по таймеру и сравнение временных меток и размеров файлов. Затем можно использовать функцию FindFirstChangeNotification WinAPI. И самым сложным и надежным методом является использование драйвера фильтра файловой системы. В Windows можно использовать CallbackFilter. В MacOS X и Linux вы можете получать сообщения, похожие на то, что предлагает FileSystemWatcher в .NET/Windows. В частности, в Linux можно использовать inotify.

Ответ 2

То, что вам нужно, это файловые системы usrspace. Я не знаю, существует ли унифицированное решение для реализации файловых систем на всех (или более всех) платформах (возможно, нет), но здесь исходная точка:

  • для linux и (я думаю, только некоторые): fusefs
  • для окон: dokan
  • для mac os: macfuse

Я не знаком со всеми из них, поэтому я не знаю, насколько легко прокси-серверы/интерфейсы, чтобы вы могли без проблем реализовывать файловые системы независимо от платформы. Во всяком случае, операции, которые должна поддерживать файловая система, (в некоторой степени) одинаковы для всех (открывать, читать, писать и т.д.), Поэтому на первый взгляд это кажется простым началом (даже если кодируется с помощью методов предварительной обработки С, Тем не менее, вы можете взглянуть на библиотеки С++ boost, которые должны быть независимыми от платформы и предложить некоторые хорошие инструменты для независимой разработки платформы, такие как а).

Удачи!

Ответ 3

Я встречаюсь с подобными проблемами, такими как ваши: разработка "кросс-платформенных" файловых систем.

  • Если вы собираетесь разработать собственную файловую систему, лучше всего попытаться выделить столько же, сколько ваши алгоритмы файловой системы (вычисление дискового макета, контрольных сумм, структур данных каталога и т.д.), помимо os- конкретных API, в ansi-c. Вы можете прочитать код ZFS, который считается хорошо написанным, так что его можно легко переносить в FreeBSD/Mac/Linux.
  • В противном случае, если вы можете удовлетворить затраты на производительность файловых систем с файлами пользователей, поддерживать файловую систему через Mac/Linux/BSD тривиально. Используя POSIX API, FUSE и сторонние библиотеки, доступные на каждой платформе, это то, что я делаю сейчас. Однако для окон я слышал реализацию FUSE, но я не думаю, что это готово к производству. Таким образом, как и в случае разработки собственной файловой системы, попробуйте как можно больше инкапсулировать логику файловой системы в ansi-c.