Osxfuse mac os что это

Обновлено: 07.07.2024

Как я и обещал, в продолжение первой части, в которой я познакомил наших читатей с платным решением проблемы невозможности записывать данные на диски NFTS в Mac OS X, сегодня опишу два способа работы без необходимости платить за программное обеспечение.

Первый способ прост до безобразия 🙂

Работа с FAT32

Для этого будем использовать раздел с файловой системой FAT32. На этот раздел можно писать как в Mac OS X, так и в Windows. Поэтому перекинуть фотографии, музыку, документы и небольшие видео-файлы из одной ОС в другую достаточно просто.

А вот если есть необходимость перебросить файл большого размера (к примеру, образ диска ISO или DMG), то пользователь столкнется проблемой, для решения которой понадобится изобретать велосипед. Потому что максимальный размер файла в FAT32 не должен превышать 4 гигабайта. Дело в том, что в 1996 году, когда начала распространяться FAT32, никто не мог предположить, что в обозримом будущем появятся файлы более 4 ГБ. Наивные 🙂

Поэтому мы сразу перейдем ко второму способу. В принципе, оно похоже по своему решению на NTFS for Mac OS X от Paragon Software. Только платить за него ничего не нужно.

MacFuse и NFTS-3G

Для этого нам прийдется скачать 2 файла общим размером в 5.7 МБ. Первой утилитой будет MacFuse, которая является платформой для множества очень интересных функций, а второй — NTFS-3G, собственно говоря, утилита, использующая MacFuse, для работы с дисками NTFS.

Обе утилиты постоянно развиваются и довольно часто обновляются. Я хотел бы отметить то, что NTFS-3G представлена в двух версиях:

  • Первая версия — стабильная, отличается довольно медленной скоростью передачи данных (что-то около скорости USB 1.1). Зато, как следует из названия, делает это качественно и без ошибок;
  • Вторая версия — экспериментальная. Быстрая, но возможно при копировании могут возникнуть ошибки, а могут и не возникнуть 🙂 Так что мой выбор пал именно на неё.

Я, конечно же, сначала попробовал стабильную версию. И довольно долго не мог понять — почему все так долго копируется. Потом, погуглив, я понял, что скорость как раз ограничена специально и установил вторую версию. В принципе, я не замечал, чтобы у меня возникали ошибки при копировании.

Устанавливать все это добро достаточно легко:

  • первым делом качаем последний MacFuse (ссылку я давал выше) для вашей ОС, потому что есть разные версии для Тигра и Леопарда;
  • качаем последний билд NTFS-3G;
  • устанавливаем MacFuse — все просто, прийдется ввести рутовый пароль;
  • перезагружаемся после инсталляции;
  • устанавливаем NTFS-3G и тоже перезагружаемся после инсталляции.

После этого, в System Preferences появляется 2 значка.


Настройки NFTS-3G по-умолчанию заблокированы, но если их разблокировать, то можно настроить общие настройки и настройки для каждого из подключенных томов отдельно.


После этого, у пользователя появляется возможность писать на диски NTFS информацию на хорошей скорости и не ощущать неудобств 🙂 Причем пользователь получает полный доступ над файлами на разделе с NTFS: хоть переименовывать, хоть удалять, хоть запускать.


Думаю, эта тема MacFuse получит продолжение и в следующий раз я постараюсь рассказать как подружить его с iPhone.


Кроме того, файловые системы могут действовать и как клиенты для сетевых протоколов, обеспечивая доступ к файлам, хранящимся на сервере (например, это справедливо для NTFS). Наконец, существуют так называемые «виртуальные» файловые системы, предоставляющие метод доступа к данным файловых устройств. В качестве примера такой системы в мире UNIX можно назвать procfs — в UNIX эта система предоставляет информацию о процессах в виде структуры каталогов.

MacFUSE позволяет реализовать полнофункциональную файловую систему в пользовательском пространстве Mac OS X. Это означает, что реализованный код файловой системы может создаваться и запускаться непривилегированными пользователями без необходимости переписывания кода ядра. Модуль файловой системы в пользовательском пространстве (FUSE) предоставляет «мост» к фактическому коду ядра. MacFUSE делает попытку обеспечения совместимости с исходным механизмом FUSE, который впервые появился в Linux. Это позволяет пользователям компилировать и использовать множество популярных файловых систем FUSE, разработанных на других платформах, в дополнение к новым, разработанным специально для Mac OS X. Это дает возможность разработчикам строить определения файловых систем, которые будут работать на любой платформе, при условии поддержки спецификаций FUSE.

FTPFS (FTP File System) и SSHFS (SSH File System) — это файловые системы FUSE, позволяющие монтировать удаленные системы с использованием протоколов FTP и SSH. Удаленные системы при этом будут выглядеть как примонтированные диски, с которыми можно будет производить обмен файлами методом перетаскивания. FTP (File Transfer Protocol) — это широко распространенный сетевой протокол, используемый для передачи файлов, а SSH (Secure SHell) — это протокол, обеспечивающий шифрование при коммуникациях с удаленными системами. SSHFS позволит вам примонтировать удаленную файловую систему (например, файл-сервер в офисе, учебном заведении или на сервере, предоставляющем вам хостинг для вашего Web-сайта) при обеспечении безопасных коммуникаций с использованием протокола SSH. SSHFS можно скачать с сайта MacFUSE. Этот компонент снабжен базовым графическим интерфейсом и очень прост в использовании.

Как правило, под управлением Mac OS X, диски, отформатированные с использованием NTFS, доступны только на чтение. NTFS — это предпочтительная файловая система, используемая всеми современными системами Windows (включая и компьютеры Mac, использующие Boot Camp). Если вы так или иначе должны взаимодействовать с компьютерами, работающими под управлением Windows, вы, скорее всего, часто сталкиваетесь и с NTFS. Файловая система ntfs-3g FUSE позволяет обеспечить для дисков NTFS возможности как чтения, так и записи.

Использование Gmail для файлового хранилища

GmailFS — это виртуальная файловая система, разработанная Ричардом Джонсом (Richard Jones). Она использует учетную запись Gmail для хранения файлов. GmailFS не следует путать с GoogleFS — распределенной файловой системой, созданной Google для внутренних целей.

Чтобы подготовить вашу систему к установке GmailFS (а также для использования других популярных файловых систем FUSE), вам потребуется установить следующие модули, в дополнение к MacFUSE:

Если вы — активный пользователь, имеющий большое количество файлов для передачи, не стоит использовать Gmail в качестве хранилища файлов. Хранение файлов на Google — это один из видов активности, за который вашу учетную запись могут взять на заметку, в результате чего вы можете лишиться доступа на срок до 24 часов.

Поскольку все эти компоненты доступны через Fink, то использование Fink будет простейшим вариантом установить GmailFS. Если вы уже пользуетесь MacPorts и вполне довольны этой системой, вы можете установить через MacPorts все компоненты, кроме libgmail. После этого можно скачать последнюю версию GmailFS с Web-сайте разработчика.

Если вы установили GmailFS через Fink, то последующие инструкции можно пропустить. После того как вы загрузите GmailFS с Web-сайта разработчика, вам потребуется открыть архив с исходным кодом, дав из командной строки Terminal следующие команды.

123// Открытие архива с исходным кодом GmailFS$ tar –zxvf gmailfs-0.8.0.tar.gz$ cd gmailfs-0.8.0/

Комбинация 0.8.0 представляет собой номер версии GmailFS, который в будущем может измениться. Последующие несколько команды могут запросить у вас пароль к Mac OS X.

123// Перемещение файлов GmailFS в инсталляционный каталог$ sudo mv gmailfs.py /usr/local/bin/gmailfs.py$ sudo mv mount.gmailfs /sbin/mount_gmail

После этого для получения полностью работающей инсталляции GmailFS вам останется произвести лишь одну заключительную конфигурационную операцию. В каталоге GailFS-0.8.0 имеется файл с именем gmailfs.conf. Отредактируйте этой файл любым текстовым редактором, изменив в нем следующие строки.

1234// Строки из файла gmailfs.conf, подлежащие редактированию[account]username = gmailusernamepassword = gmailpassword

Здесь строку gmailusername следует заменить на имя вашей учетной записи Gmail, а gmailpassword — на ваш пароль Gmail. Затем вам следует сохранить этот файл в каталоге /private/etc на вашем компьютере (для этого вам потребуется воспользоваться командой sudo). Теперь можно приступать к перемещению файлов в хранилище, образованное на базе вашей учетной записи Gmail. Для этого запустите программу Terminal и дайте следующие команды.

12345// Перемещение файлов в хранилище, // организованное на базе учетной записи Gmail$ mkdir

/gmailfs$ mount -ovolname=bla -o username=gmailuser -o password=gmailpass -o fsname=zOlRRa -t gmailfs /usr/local/bin/gmailfs.py

Команды, приведенные в листинге выше, приводят к тому, что ваша учетная запись Gmail будет примонтирована к папке /Users/yourosxusername/gmailfs в вашем домашнем каталоге. При работе через командную строку домашний каталог обозначается символом

, и, соответственно, путь к папке, к которой будет примонтировано ваше новое хранилище, будет выглядеть так:

/gmailfs/. После успешного исполнения команд из листинга выше, все файлы, которые вы поместите в каталог

/gmailfs/, будут сохранены в виде почты в вашем почтовом ящике Gmail. Вы сможете получать к ним доступ как через Finder, где ваше хранилище Gmail также будет отображаться в виде примонтированного диска, так и через командную строку.

Расширяем возможности Spotlight

SpotlightFS — это одна из наиболее интересных файловых систем FUSE. Она разработана специально для Mac OS X. Кроме того, она и появилась одной из первых. SpotlightFS создает интеллектуальные папки (smart folders) на базе Spotlight, содержимое которых генерируется динамически и практически мгновенно. Эти интеллектуальные папки обладают более широкими возможностями, нежели интеллектуальные папки, встроенные в Mac OS X, поскольку, в отличие от них, это не виртуальные, а настоящие папки. В Mac OS X встроенные виртуальные папки в действительности представляют собой не папки, а файлы формата XML, при открытии генерирующие запросы Spotlight. Преимущество настоящих папок перед виртуальными заключается в том, что их можно использовать из любого приложения, а также из командной строки. SpotlightFS можно скачать из раздела Downloads Web-сайта MacFUSE15. После установки вы немедленно сможете воспользоваться SpotlightFS, запустив приложение SpotlightFS.app.

Существуют два различных метода использования SpotlightFS. Простейший из них заключается в применении функции SmarterFolders, которая, как логично предположить на основании ее названия, представляет еще более интеллектуальные возможности, нежели встроенные интеллектуальные папки Mac OS X. Это папки, которые не нужно создавать. Для просмотра их содержимого их достаточно просто открывать. Чтобы начать пользоваться SpotlightFS, запустите приложение SpotlightFS.app, а затем в окне Finder выберите опции Go→Open Folder. Теперь попробуйте ввести следующий путь: /Volumes/SpotlightFS/SmarterFolder/apple. В

ы откроете виртуальную папку, в которой будут содержаться все файлы, возвращенные в ответ на запрос Spotlight по ключевому слову apple. Таким образом вы будете использовать интеллектуальные папки без необходимости создавать их заранее и сможете получать к ним доступ из множества различных приложений. Чтобы получить доступ к интеллектуальной папке из командной строки, дайте следующую команду:

1$ ls -lrt /Volumes/SpotlightFS/SmarterFolder/apple

В результате выполнения этой команды будет выведен список всех файлов, возвращенных по запросу Spotlight по ключевому слову apple. Если вы свободно обращаетесь с командной строкой, то SpotlightFS поможет вам в выполнении пакетных операций над множеством файлов.

Второй метод использования SpotlightFS заключается в фактическом создании каталога, вложенного в /Volumes/SpotlightFS. Этому вложенному каталогу следует присвоить имя искомой строки, например, Apple Hacks. После этого вложенный каталог, названный по имени искомой строки, будет вести себя точно так же, как интеллектуальные папки в Mac OS X, оставаясь при этом реальной папкой. Чтобы создать такой каталог из командной строки и начать им пользоваться, вы можете ввести следующие команды.

1234// Создание и использование интеллектуальной// папки SpotlightFS$ mkdir /Volumes/SpotlightFS/Apple Hacks/$ ls -lrt /Volumes/SpotlightFS/Apple Hacks/

FUSE предоставляет множество возможностей упрощения доступа к данным. В дополнение к этим возможностям, FUSE предоставляет возможности реализации доступа к файловым системам, которые исторически не поддерживаются под Mac OS X. Правда, если экспериментирование с виртуальными файловыми системами является относительно безопасным, о реализации NTFS с помощью FUSE этого сказать нельзя. Поэтому прежде чем вы установите и начнете использовать полнофункциональную файловую систему, например, ntfs-3g, настоятельно рекомендуется выполнить полное резервное копирование всех ваших данных и, разумеется, внимательно прочесть инструкции.


OSXFUSE наследник MacFUSE, который использовался в качестве строительного блока в разных программах, но больше не поддерживается.

OSXFUSE позволяет использовать любые сторонние виртуальные файловые системы, построенные для OSXFUSE или MacFUSE, если вы решите установить уровень совместимости MacFUSE.
Как разработчик, вы можете использовать SDK OSXFUSE для создания новых видов файловых систем. Содержание этих файловых систем может быть с локального диска, из сети, из памяти или любого другого источника. Написание файловой системы используя OSXFUSE, намного проще традиционного подхода создания файловой системы в ядре. Так как файловые системы OSXFUSE являются обычными приложениями (в отличие от расширений ядра), у вас большой выбор инструментов программирования, отладчиков, библиотек для разработки стандартных приложений OS X.

Как это работает.

Техническими терминами, OSXFUSE реализует механизм которые делает возможным создание виртуальной файловой системы в пользовательском пространстве на OS X. Обеспечивает несколько интерфейсов API, одним из которых является API FUSE (файловая система в пользовательском пространство), которая возникла на Linux. Таким образом, многие FUSE файловые системы стало возможно использовать на OS X.

Программное обеспечение OSXFUSE состоит из расширения ядра и различных программ и библиотек пользовательского пространства. OSXFUSE поставляется с SDK для C и Object-C. Если вы предпочитаете другой язык (например, Python или Java), вы можете создать файловые системы на этих языках после установки соответствующих языковых привязок.

Исходные коды SSHFS, PROCFS, AccessibilityFS, GrabFS, LoopbackFS, SpotlightFS, YouTubeFS и других файловых систем находятся в хранилище.

  • OSXFUSE является преемником MacFUSE , который был брошен в 2009 году.
  • OSXFUSE имеет режим совместимости для файловых систем, которые были построены для MacFUSE.
  • OSXFUSE поддерживает Mac OS X 10.5 и более поздние версии (Intel и PowerPC). Он полностью совместим с 64-битными ядрами и OS X 10.7.

Создание файловой системы на FUSE и Swift

Что такое FUSE?

Проект FUSE for macOS представляет собой аналогичный набор API (а также Objective-C фреймворк), позволяющий реализовать полноценную файловую систему, которая будет работать в пространстве пользователя на macOS. Так как его API является надмножеством FUSE API из Linux, то существует теоретическая возможность завести многие из существующих файловых систем на macOS. В настоящее время этот проект остается единственной реализацией FUSE для macOS, которая развивается и поддерживается силами сообщества, хотя и активность на GitHub и в Google Groups сейчас довольно низкая.

Установка фреймворка

Установка не отличается сложностью: скачиваете инсталлятор с сайта разработчика и запускаете его. Если предпочитаете собирать такие вещи из исходников, то это тоже не составит труда: достаточно установить зависимости через brew и запустить сборочный скрипт, все это подробно описано в Readme на GitHub.

Настройка проекта

Создадим новый проект в Xcode. Это должно быть Cocoa Application (в разделе macOS), я назвал его HelloFuse, язык выберем Swift, остальные параметры можно выбрать на свое усмотрение.

Подключим фреймворк

После установки фреймворк будет расположен по следующему пути: /Library/Frameworks/OSXFUSE.framework. Чтобы добавить его в проект, достаточно просто перетащить его в раздел Linked Frameworks and Libraries на вкладке General настроек сборки.

Создание файловой системы на FUSE и Swift

Подключение фреймворка

Создадим Bridging Header

Так как мы пишем проект на Swift, а фреймворк реализован на Objective-C, то нам нужно создать и подключить так называемый Bridging Header. Создадим заголовочный файл (File > New > File > macOS > Source > Header File), назовем его HelloFuse-Bridging-Header.h и добавим в него следующую строчку:

Теперь на панели навигации выбираем наш проект, выбираем сборку в разделе Targets, переходим на вкладку Build Settings, находим раздел Swift Compiler → General, в поле Objective-C Bridging Header добавляем

$ ( PROJECT_DIR ) / $ ( TARGET_NAME ) / HelloFuse - Bridging - Header . h

Создание файловой системы на FUSE и Swift

Подключаем Bridging Header в настройках проекта

Отключим Sandbox

По умолчанию во всех приложениях включена песочница, которая ограничивает возможности приложения, но в отличие от iOS на macOS ее можно отключить. Этим ты потеряешь право распространять приложение через App Store (что тоже не будет проблемой в случае с macOS), но в нашем случае нам нужен полноценный доступ к файловой системе, поэтому выбора нет.

Перейдем на вкладку Capabilities в настройках сборки и поставим переключатель в пункте App Sandbox в положение OFF.

Hello world

Описание файловой системы

Поведение файловой системы описывается в отдельном классе. Создадим класс под названием HelloFS и унаследуем его от NSObject. В минимальном примере нам понадобится реализовать только два метода: получение списка файлов, который мы будем отображать, и содержимое каждого файла.

В методе, отвечающем за отображение файлов, нужно вернуть массив строк с именами файла. В качестве параметра туда приходит путь (path), в более сложных случаях нужно будет его обрабатывать, чтобы показывать контент соответствующей директории. Здесь я просто возвращаю один файл hello.txt.

override func contentsOfDirectory ( atPath path : String ) throws &rarr; [ Any ] <

В метод, который отвечает за отображение пути файла, аналогично приходит путь, в зависимости от которого мы должны решить, какое содержимое отдавать для файла. В нашем же примере мы будем для всех файлов возвращать строку «Hello world!».

override func contents ( atPath path : String ) &rarr; Data ? <

В итоге файл HelloFS.swift примет следующий вид:

override func contentsOfDirectory ( atPath path : String ) throws &rarr; [ Any ] < override func contents ( atPath path : String ) &rarr; Data ? <

Инициализация файловой системы

В классе AppDelegate объявим две переменные:

В метод applicationDidFinishLaunching добавим следующий код:

userFileSystem = GMUserFileSystem ( delegate : helloFS , isThreadSafe : false ) var options : [ String ] = [ "rdonly" , "volname=HelloVolume" ] userFileSystem ? . mount ( atPath : "/Volumes/hello" , withOptions : options )

Код достаточно интуитивен: инициализируем файловую систему, указываем название раздела и передаем параметр, что она только для чтения, а затем монтируем ее по указанному пути.

По завершении работы приложения в методе applicationWillTerminate демонтируем нашу файловую систему:

< span class = "pln" > userFileSystem < / span > < span class = "pun" > ? . < / span > < span class = "pln" > unmount < / span > < span class = "pun" > ( ) < / span >

После запуска приложения наш раздел появится в директории /Volumes, a также должен быть виден и в корневой директории. В разделе будет лежать единственный файл hello.txt, в котором будет написано «Hello world!».

Создание своей файловой системы на FUSE Swift

Результат работы нашего Hello world проекта

Установка собственной иконки для раздела

Для раздела можно заменить иконку по своему усмотрению, для этого в проект нужно положить иконку в формате *.icns (требования к размерам и прочему можно найти в macOS Design Guidelines) и добавить путь к ней в массив options.

if let volumeIconPath = Bundle . main . path ( forResource : "disk" , ofType : "icns" ) < options . insert ( "volicon= \ ( volumeIconPath ) " , at : 0 )

Файловая система для фото из VK

Давай попрактикуемся и реализуем то, для чего в большинстве случаев создаются подобные файловые системы, — отображение контента с удаленного сервера в виде файлов и папок. Предлагаю отобразить таким образом альбомы и фотографии из паблика нашего журнала в VK. Пример можно будет легко адаптировать для своих нужд, так как мы не будем завязываться на SDK «ВКонтакте», а будем обращаться напрямую к методам REST API, доступным без авторизации.

Модели данных

Мы будем оперировать двумя сущностями: альбом и фотография. Альбомы будут лежать в корне нашей файловой системы и выглядеть как папки, а фотографии находиться в альбомах и выглядеть, соответственно, как файлы картинок. Наши модели должны удовлетворять протоколу Decodable, для того чтобы мы могли их распарсить из JSON, который мы получим с сервера.

Для альбома нам понадобится знать его идентификатор, чтобы потом по нему запросить фотографии, а также его название.

Для фотографий нам нужно знать URL, по которому мы будем скачивать фотографию, а также имя файла. Так как в VK нет отдельного заголовка для фотографий, я буду использовать имя файла из URL.

let values = try decoder . container ( keyedBy : CodingKeys . self ) url = try values . decode ( String . self , forKey : . url ) filename = NSString ( string : url ) . lastPathComponent as String

Ответ сервера VK имеет следующую структуру:

Интересующая нас информация лежит в items. Чтобы с такой структурой было удобнее работать, сделаем вспомогательную модель VKResponse.

let values = try decoder . container ( keyedBy : RootKeys . self ) let responseValues = try values . nestedContainer ( keyedBy : CodingKeys . self , forKey : . response ) items = try responseValues . decodeIfPresent ( [ T ] . self , forKey : . items )

Сервис для получения данных

Описание файловой системы

Алгоритм отображения контента будет следующий. Проверяем, находимся ли мы в корневой директории, если да, то возвращаем список альбомов; иначе предполагаем, что мы вошли в альбом, пытаемся получить его и отобразить список фотографий.

override func contentsOfDirectory ( atPath path : String ) throws &rarr; [ Any ] < guard let album = vkService . getAlbum ( forPath : path ) else < return [ ] >

Методы requestAlbums() и requestPhotos() нам нужны, чтобы запросить у нашего сервиса соответствующий контент.

NSWorkspace . shared . noteFileSystemChanged ( "/Volumes/hello/" ) vkService . fetchPhotos ( forAlbum : album ) < ( photos , error ) in NSWorkspace . shared . noteFileSystemChanged ( "/Volumes/hello/" + album . title )

Обрати внимание на вызов метода NSWorkspace.shared.noteFileSystemChanged. Существует проблема с тем, что SDK FUSE for macOS ожидает данные синхронно, соответственно, нам нужно будет как-то обновить список файлов, после того как он вернется с сервера. Для этого мы и вызываем упомянутый метод: он сообщит файловой системе, что нужно обновить контент по переданному пути, и метод contentsOfDirectory будет вызван еще раз.

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

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

override func contents ( atPath path : String ) &rarr; Data ? <

Метод getPhotoData, принадлежащий классу VKService, получает данные синхронно, используя метод sendSynchronousRequest класса NSURLConnection. Синхронное получение данных будет выглядеть следующим образом:

private func fetchPhoto ( urlPath : String ) &rarr; Data ? < return try NSURLConnection . sendSynchronousRequest ( request ,

Этот метод в настоящее время помечен Apple как устаревший, поэтому альтернативно можно использовать DispatchSemaphore в комплекте с URLSessionDataTask.

У вдумчивого читателя к этому моменту должен был возникнуть вопрос: а как файловая система определяет, показать файл или папку? Для этого необходимо переопределить еще один метод, attributesOfItem.

override func attributesOfItem ( atPath path : String ! , userData : Any ! ) throws &rarr; [ AnyHashable : Any ] < attributes [ FileAttributeKey . type ] = FileAttributeType . typeDirectory attributes [ FileAttributeKey . type ] = FileAttributeType . typeRegular

Здесь мы определяем, какие атрибуты выставить для файла по заданному пути. Я проверяю, если мы можем получить альбом для этого пути, то выставляем тип «Директория», иначе — «Файл». Для корневой директории нам не требуется возвращать никаких атрибутов.

Создание своей файловой системы на FUSE и Swift

Отображаем альбомы и фотографии из VK в нашей файловой системе

Что дальше?

В сегодняшнем материале мы рассматривали примеры исключительно read-only-систем, но нужно понимать, что реализовать запись и удаление файлов тоже не сложно: достаточно аналогичным способом переопределить соответствующие методы, с полным перечнем которых ты можешь ознакомиться в заголовочном файле OSXFUSE/OSXFUSE.h. Еще хотелось бы обратить внимание, что метод contents(atPath:) не единственный способ вернуть содержимое файла, для более сложных случаев можно реализовать полный цикл open/read/release, и авторы библиотеки рекомендуют именно этот способ, как более производительный.

Также за кадром осталось то, что FUSE for macOS умеет генерировать события для Notification Center, на которые можно подписаться (например, открывать Finder после того, как система примонтировалась). Пример использования ты также найдешь в исходниках.

Выводы и предостережения

Читайте также: