visual turbo studio programar programa para mac for borland c++ xcode macos iokit

c++ - studio - turbo c para mac



¿Cómo crear un programa para listar todos los dispositivos USB en una Mac? (3)

Tengo una exposición limitada al sistema operativo Mac OS X y ahora he empezado a usar Xcode y estoy estudiando sobre el kit de E / S. Necesito crear un programa en Xcode bajo la herramienta de línea de comandos para listar todos los dispositivos USB conectados en un sistema Mac. Aquellos que tengan experiencia previa bajo esto, por favor ayúdenme. Si alguien me puede proporcionar un código de ejemplo, será de gran utilidad, ya que estoy buscando un punto de partida.


Si ejecuta system_profiler SPUSBDataType , mostrará una lista de todos los dispositivos USB conectados al sistema, y ​​luego podrá interactuar con esos datos descargándolos en un archivo de texto o leyéndolos desde el comando a la aplicación y trabajando allí.


Solo necesitas acceder al Registro IOKit. Es posible que pueda utilizar la herramienta ioreg para hacer esto (por ejemplo, ejecútelo a través de system() o popen() ). Si no, entonces al menos puedes usarlo para verificar tu código:

Información sobre la herramienta ioreg :

$ man ioreg

Obtener la lista de dispositivos USB:

$ ioreg -Src IOUSBDevice


Puede adaptar USBPrivateDataSample a sus necesidades, la muestra configura un notificador, enumera los dispositivos actualmente conectados y luego espera a que el dispositivo se conecte / desconecte. Si lo hace, querrá eliminar los diccionarios coincidentes usbVendor y usbProduct , para que todos los dispositivos USB coincidan.

Alternativamente, puede usar IOServiceGetMatchingServices para obtener un iterador para todos los servicios coincidentes actuales, usando un diccionario creado por IOServiceMatching(kIOUSBDeviceClassName) .

Aquí hay una pequeña muestra (que nunca he corrido):

#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; }