Как запросить, является ли определенная папка общей или перечислить папки с локальной машины на osx в C/C++ или Objective C
В настоящее время я работаю на MacOS High Sierra (не Windows), используя Qt. Просто используя обычный macOS, а не macOS сервер. Я рад написать код только для Mac вне пузыря Qt, чтобы решить эту проблему, очевидно.
Я ищу способ программно проверить в C/C++ или Objective-C, является ли конкретная локальная папка общей для локальной сети. В качестве альтернативы я хотел бы получить список всех общих папок. Мне бы хотелось, чтобы этот метод работал на достаточно большом диапазоне версий MacOS, например, с 10,9 до 10,14.
Мне нужно сделать это, чтобы переписать пути к локальным файлам как UNC-пути, чтобы они были доступны с клиентского компьютера Windows в той же сети через общий доступ к SMB с подходящими учетными данными. Предполагается, что общие папки уже настроены, но если их нет, пользователь получит сообщение об ошибке и предложит поделиться соответствующими папками.
Я могу поделиться / отменить общий доступ и просмотреть состояние общего доступа к папке с помощью диалогового окна "Получение информации" в Finder, но я ищу что-то, что можно использовать в приложении.
Вещи, которые я попробовал без успеха:
- Поиск других случаев проблемы
- NSURL класс - не документирует имя ресурса для запроса его статуса общего доступа.
- Похоже, что smbutil не отображает список общих ресурсов с компьютера, на котором он запущен.
- У smbd, похоже, нет параметров командной строки для запроса общих папок.
- Различные файлы конфигурации, упомянутые в справочных страницах smbutil и smbd.conf, не содержат списка общих папок.
- MDL не содержит соответствующих метаданных в выходных данных для общих папок.
- ls -l @ не выводит никакой дополнительной информации для общих папок
- Совместное использование папки с необычным именем и поиск на жестком диске имени папки, включая двоичные файлы, чтобы проверить, сохраняется ли эта информация где-либо. Предположительно это сохраняется каким-то образом, потому что папка открыта для общего доступа после перезагрузки, но я нигде не могу найти записи об имени папки.
- Сервисы OpenDirectory, похоже, содержат много ссылок на SMB в заголовках, но я не вижу способа использовать OpenDirectory для получения списка общих папок с локального компьютера.
- Совместное использование корневой папки, чтобы переписать было тривиально. Это работает, но довольно нежелательно делить корневую папку.
- Возможно, есть лучший способ сделать доступ, который обойдёт необходимость иметь и запрашивать акции SMB...?
1 ответ
Нашел ответ в другом месте на stackexchange, на который ответил user53547.
Выполните следующую команду и запишите вывод.
совместное использование -l
Это дает немного подробный список общих файловых ресурсов с отдельными сведениями для afp и smb, который можно проанализировать, чтобы получить список общих папок на локальном компьютере. Проверено на Каталине. Возможно, эта команда не запустится, если общий доступ к файлам не включен в Системных настройках.