2011-09-27 12 views
18

Mam ograniczony dostęp do systemu operacyjnego Mac OS X, a teraz zacząłem używać Xcode i studiuję na temat zestawu I/O. Potrzebuję utworzyć program w Xcode pod narzędziem wiersza poleceń, aby wyświetlić listę wszystkich urządzeń USB podłączonych do systemu Mac. Ci, którzy mają wcześniejsze doświadczenia w tym zakresie, pomóżcie mi. Jeśli ktokolwiek mógłby mi podać przykładowy kod, będzie to bardzo przydatne, ponieważ szukam punktu początkowego.Jak utworzyć program do wyświetlania wszystkich urządzeń USB na Macu?

Odpowiedz

19

można dostosować USBPrivateDataSample do swoich potrzeb , próbka ustawia powiadamiającego, wyświetla listę aktualnie podłączonych urządzeń, a następnie czeka na dołączenie/odłączenie urządzenia. Jeśli to zrobisz, będziesz chciał usunąć dopasowane słowniki, tak aby wszystkie urządzenia USB były dopasowane.

Alternatywnie można użyć IOServiceGetMatchingServices, aby uzyskać iterator dla wszystkich bieżących pasujących usług, używając słownika utworzonego przez IOServiceMatching(kIOUSBDeviceClassName).

Oto krótka próbka (które nigdy nie uruchomić):

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

Dzięki za pomoc. Jest to bardzo przydatne i jest podobne do tego, czego szukam. kiedy go buduję, ale ten kod pokazuje błędy, takie jak błąd: IOServiceGetmatchingServices przywoływane z _main w pliku main.o ... Podobne błędy dla _IOObjectRelease, _IOServiceMatching, _IOIteratorNext, _kIOMasterPortDefault..I stworzyłem projekt pod xcode-> Narzędzie wiersza poleceń-> standard C++. Jeśli możesz mi pomóc, będę ci bardzo wdzięczny – Dili

+0

Błędy, które dostałem podczas budowania ................. Niezdefiniowane symbole: "_kIOMasterPortDefault", do którego odwołuje się: _kIOMasterPortDefault $ non_lazy_ptr w main.o "_IOServiceGetMatchingServices", przywoływane z: _main w main.o "_IOObjectRelease", przywoływane z: _main w main.o _main w main.o "_IOServiceMatching", przywoływane z: _main in main.o "_IOIteratorNext", do którego odwołuje się: _main w głównej.o ld: symbol (s) nie znaleziono collect2: ld zwrócił 1 status wyjścia – Dili

+3

Musisz użyć framework I/O Kit (tj. 'IOKit.framework') i frameworków Core Foundation w swoim projekcie, lub to wygrał ' t link. – Hasturkun

2

Jeśli uruchomisz system_profiler SPUSBDataType, wyświetli się lista wszystkich urządzeń USB podłączonych do systemu, możesz następnie wejść w interakcję z tymi danymi poprzez zrzucenie go do pliku tekstowego lub odczytanie go z polecenia w aplikacji i pracę z nim .

+0

dzięki za pomoc. – Dili

7

Wystarczy uzyskać dostęp do rejestru IOKit Registry. Możesz również użyć narzędzia ioreg, aby to zrobić (np. Uruchom je za pomocą system() lub). Jeśli nie, to można przynajmniej używać go do weryfikacji kodu:

informacji na ioreg narzędzi: listy

$ man ioreg 

wysiąść urządzeń USB:

$ ioreg -Src IOUSBDevice 
+0

Dzięki za pomoc. Będzie to bardzo pomocne przy weryfikacji. Ale potrzebuję programu w Xcode (w C++) do wymieniania urządzeń USB – Dili

+2

Czy przeczytałeś część o użyciu 'system()' lub 'popen()', aby uruchomić narzędzie ioreg z poziomu twojego kodu? –

+0

Przeczytałem to. ale szukałem czegoś podobnego do kodu podanego poniżej przez hausturkun. to też jest przydatne. ale jeśli podasz przykładowy kod, jak powiedziałem, będzie najlepszy. – Dili

Powiązane problemy