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
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;
}
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 .
dzięki za pomoc. – Dili
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
Dzięki za pomoc. Będzie to bardzo pomocne przy weryfikacji. Ale potrzebuję programu w Xcode (w C++) do wymieniania urządzeń USB – Dili
Czy przeczytałeś część o użyciu 'system()' lub 'popen()', aby uruchomić narzędzie ioreg z poziomu twojego kodu? –
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
- 1. Użyj funkcji RegisterDeviceNotification() dla WSZYSTKICH urządzeń USB.
- 2. Jak włączyć pasek szybkiego wyświetlania do wyświetlania wszystkich typów plików?
- 3. Kakao: wykrywanie urządzeń USB według identyfikatora dostawcy
- 4. Programowalne podłączanie i odłączanie urządzeń USB
- 5. Chrome devTools nie widzi urządzeń USB do debugowania
- 6. Windows - Jak wyliczyć wszystkie ścieżki urządzeń podłączonego urządzenia USB?
- 7. Historia przeglądania wszystkich zalogowanych urządzeń
- 8. Jak utworzyć program OCR?
- 9. Jak utworzyć datę UIDatePicker wyświetlania dat?
- 10. Jak zrobić contentInset na NSScrollView na Macu
- 11. Port USB na port szeregowy
- 12. Skróty w elektronach na Macu
- 13. Odwracanie tetheringu z kilku urządzeń z Androidem przez USB
- 14. Zdalne jądro matematyki na macu
- 15. Pełna lista wszystkich urządzeń z Androidem
- 16. Jak używać SceneBuilder z IntelliJ na Macu
- 17. Jak mogę przetestować IE10 na Macu?
- 18. Jak zainstalować Solr na Macu używając Homebrew?
- 19. Laravel 5.2 - Jak wylogować użytkownika ze wszystkich jego urządzeń
- 20. Jak dodać narzędzia Android do mojej ścieżki na Macu?
- 21. Instalacja Numpy na Macu 10.8.2
- 22. Emulacja fizycznego urządzenia USB Linux
- 23. Jak mogę zainstalować qpdf na Macu 10.8.3?
- 24. Jak włączyć C++ 17 na Macu?
- 25. Jak naprawić błąd libiconv na Macu?
- 26. Jak zmienić wersję Rails na Macu?
- 27. Sterownik MySQL PDO na Macu
- 28. Skrypty do wyświetlania wszystkich różnych znaków w pliku tekstowym
- 29. MonoDevelop na Macu - Ustawienia eksportu
- 30. Używanie Sparka do wyświetlania wszystkich plików w katalogu HDFS Hadoop?
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
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
Musisz użyć framework I/O Kit (tj. 'IOKit.framework') i frameworków Core Foundation w swoim projekcie, lub to wygrał ' t link. – Hasturkun