Soy un principiante en programación en mac os x.
Estoy siguiendo este tutorial .
Y tengo este programa:
#include <stdio.h>
#include <IOKit/hid/IOHIDManager.h>
#include <IOKit/hid/IOHIDKeys.h>
#include <CoreFoundation/CoreFoundation.h>
static void Handle_DeviceMatchingCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
puts("YAY Handle_DeviceMatchingCallback");
}
static void Handle_DeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
puts("YAY Handle_DeviceRemovalCallback");
}
int main()
{
IOHIDManagerRef HIDManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
IOHIDManagerSetDeviceMatching(HIDManager, NULL);
IOHIDManagerRegisterDeviceMatchingCallback(HIDManager, &Handle_DeviceMatchingCallback, NULL);
IOHIDManagerRegisterDeviceRemovalCallback(HIDManager, &Handle_DeviceRemovalCallback, NULL);
IOHIDManagerScheduleWithRunLoop(HIDManager, CFRunLoopGetMain(), kCFRunLoopDefaultMode);
IOReturn IOReturn = IOHIDManagerOpen(HIDManager, kIOHIDOptionsTypeNone);
if(IOReturn) puts("IOHIDManagerOpen failed.");
while(1)
{
puts("sleeping...");
sleep(1);
}
return 0;
}
Lo que estoy haciendo mal, porque no recibo las devoluciones de llamada cuando inserto o elimino cualquier dispositivo oculto en el puerto USB.

RunLooplugar dewhileen la función principal. use por ejemplo:CFRunLoopRun()para esto.Respuestas:
IOHIDManagerScheduleWithRunLoopestá conectado aRunLoop, por lo que debe comenzar uno.whileLoop no es la solución aquí. Entonces, para obtener devoluciones de llamada, debe reemplazar elwhilebucle con laCFRunLoopRun()llamada. Más información sobre RunLoops en la documentación .fuente