Существует ли простой способ получить порядковый номер всех жестких дисков в Mac с помощью API?
В основном я ищу уникальный идентификатор для жесткого диска, с которым я могу выяснить, использовался ли жесткий диск (или упоминался) моим приложением или нет.
Сообщите мне, существует ли какое-либо другое решение.
Примечание: Мне нужно это решение для 10,4 и выше.
Не уверен, что "AppleUSBEHCI" - это то, что нужно искать, но вы можете получить такие данные, используя фреймворк IOKit:
#include <IOKit/IOKitLib.h>
#include <Cocoa/Cocoa.h>
kern_return_t kr;
io_iterator_t io_objects;
io_service_t io_service;
kr = IOServiceGetMatchingServices(kIOMasterPortDefault,
IOServiceNameMatching("AppleUSBEHCI"), &io_objects);
if(kr != KERN_SUCCESS)
exit(1);
while((io_service= IOIteratorNext(io_objects)))
{
kr = IORegistryEntryCreateCFProperties(io_service, &service_properties, kCFAllocatorDefault, kNilOptions);
if(kr == KERN_SUCCESS)
{
NSDictionary * m = (NSDictionary *)service_properties;
NSLog(@"%@", m);
CFRelease(service_properties);
}
io_iterator_t iter;
//handle kr error
kr = IORegistryEntryGetChildIterator(io_service, kIOServicePlane, &iter);
io_registry_entry_t child;
while( (child = IOIteratorNext( iter )))
{
kr = IORegistryEntryCreateCFProperties(child, &child_props, kCFAllocatorDefault, kNilOptions );
NSLog(@"Child props: %@", child_props);
//release child_props
}
IOObjectRelease(io_service);
}
IOObjectRelease(io_objects);
Взгляните на IOKit.
На вашем Mac есть два удобных инструмента, чтобы узнать о его возможностях:
может быть, вы просто разместите скрытый файл на жестком диске, который использует ваше приложение? Например, как это делает "Машина Времени" от Apple.
Я думаю, что лучше получить громкость UUID (например, в дисковой утилите.)
UUID может быть получен с использованием арбитража диска , который немного более высокий уровень, чем iokit и легче использовать.
Создать DADISKREF
Использование DadiskCreateFrombsdname
, и использовать DadiskCopydescription
, чтобы получить информационный словарь, и посмотреть клавишу KDADISKDESCRICEMEDIAUUUIDKEY
. Информация о монтированной точке и т. Д. Может быть получена .
, которые сказали, что может быть проще просто вызвать утилиту командной строки Diskutil с вариантом -PList
, чтобы получить информацию в формате plist.
Образец код fsmegainfo может также быть поучительным, как получить гораздо больше информации о диске.