У меня ограниченная работа с операционной системой Mac OS X, и теперь я начал использовать Xcode и изучаю комплект I/O. Мне нужно создать программу в Xcode под инструментом командной строки, чтобы перечислить все USB-устройства, подключенные в системе Mac. Те, у кого есть предыдущий опыт, помогите мне. Если кто-то может предоставить мне образец кода, тогда он будет очень полезен, поскольку я ищу отправную точку.
Как создать программу для отображения всех USB-устройств на Mac?
Ответ 1
Вы можете адаптировать USBPrivateDataSample к вашим потребностям, образец устанавливает уведомитель, перечисляет текущие подключенные устройства, а затем ожидает подключения устройства/отсоединения. Если вы это сделаете, вы захотите удалить словари usbVendor
и usbProduct
, поэтому все USB-устройства будут сопоставлены.
В качестве альтернативы вы можете использовать IOServiceGetMatchingServices
, чтобы получить итератор для всех текущих сервисов соответствия, используя словарь, созданный IOServiceMatching(kIOUSBDeviceClassName)
.
Вот короткий образец (который я никогда не запускал):
#include <IOKit/IOKitLib.h>
#include <IOKit/usb/IOUSBLib.h>
int main(int argc, const char *argv[])
{
CFMutableDictionaryRef matchingDict;
io_iterator_t iter;
kern_return_t kr;
io_service_t device;
/* set up a matching dictionary for the class */
matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
if (matchingDict == NULL)
{
return -1; // fail
}
/* Now we have a dictionary, get an iterator.*/
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter);
if (kr != KERN_SUCCESS)
{
return -1;
}
/* iterate */
while ((device = IOIteratorNext(iter)))
{
/* do something with device, eg. check properties */
/* ... */
/* And free the reference taken before continuing to the next item */
IOObjectRelease(device);
}
/* Done, release the iterator */
IOObjectRelease(iter);
return 0;
}
Ответ 2
Вам просто нужно получить доступ к реестру IOKit. Вы можете использовать инструмент ioreg
для этого (например, запустите его через system()
или popen()
). Если нет, вы можете хотя бы использовать его для проверки кода:
Информация о инструменте ioreg
:
$ man ioreg
Получить список USB-устройств:
$ ioreg -Src IOUSBDevice
Ответ 3
Если вы запустите system_profiler SPUSBDataType
, он перечислит все USB-устройства, подключенные к системе, затем вы сможете взаимодействовать с этими данными либо путем сбрасывания их в текстовый файл, либо чтения его из команды в приложение и работы с ним есть.