我對Mac OS X操作系統的曝光有限,現在我已經開始使用Xcode並正在研究I/O套件。我需要在命令行工具下的Xcode中創建一個程序,以列出在Mac系統中連接的所有USB設備。在此之前有經驗的人請幫助我。如果任何人都可以爲我提供示例代碼,那麼它將非常有用,因爲我正在尋找出發點。如何創建一個程序來列出Mac中的所有USB設備?
18
A
回答
19
可以適應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
如果您運行system_profiler SPUSBDataType
它會列出連接到系統的所有USB設備,然後您可以通過將其轉儲到文本文件或將其從命令讀入應用程序並與其一起使用來與該數據交互。
+0
感謝您的幫助。 – Dili
7
你只需要訪問由於IOKit 註冊。您可以使用ioreg
工具來執行此操作(例如,通過system()
或popen()
運行它)。如果沒有,那麼你至少可以用它來驗證你的代碼:
信息上ioreg
工具:USB設備的
$ man ioreg
獲取列表:
$ ioreg -Src IOUSBDevice
相關問題
- 1. 如何在Visual C++中列出所有連接的USB設備
- 2. 爲Linux創建一個USB設備驅動程序
- 3. 創建一個虛擬USB設備
- 4. 如何列出連接到Mac的USB端口的設備?
- 5. 列出USB設備,選擇一個備份批處理文件
- 6. 如何列出yocto上連接的所有USB設備(打印機)?
- 7. Android USB調試沒有在「設備更改」中列出mac os android studio 1.4.1
- 8. Mac應用程序掛在USB設備上的ReadPipe
- 9. 如何創建一個音頻設備驅動程序來捕獲聲音Mac正在播放?
- 10. 如何創建一個查詢來列出所有組合的可能性
- 11. 如何查找在Linux(Ubuntu)中連接的所有USB設備?
- 12. USB調試未列出我的設備
- 13. USB OTG Android和創建一個自動運行復制設備
- 14. 如何爲所有iOS設備構建應用程序?
- 15. 控制一個無驅動程序的USB音頻設備
- 16. 爲IOS中的所有設備創建唯一的UUID?
- 17. 程序中在子網中的所有設備的列表
- 18. 如何創建一個Menubar應用程序的Mac
- 19. API來檢測USB設備
- 20. 如何獲取USB設備列表
- 21. 創建一個流口水來列出其他口水中的所有規則
- 22. 用於列出所有已安裝的USB設備的UDisks腳本
- 23. 讀取USB設備序列號在C#
- 24. 所有iPhone設備的第一個iOS應用程序
- 25. 如何在Mac上獲取USB設備的UUID?
- 26. 創建設置爲mac應用程序
- 27. 如何使用jar創建一個mac應用程序?
- 28. 如何創建在所有設備上的Chromecast應用?
- 29. 如何列出我的wifi範圍內的所有設備iphone
- 30. 從USB設備運行應用程序
感謝您的幫助。這非常有用,這與iam尋找的相似。當我構建它,但此代碼顯示錯誤,如錯誤:IOServiceGetmatchingServices從_main在main.o引用...類似的錯誤爲_IOObjectRelease,_IOServiceMatching,_IOIteratorNext,_kIOMasterPortDefault..I創建一個項目在xcode->命令行工具 - >標準C++。如果你可以幫忙,我會非常感謝你 – Dili
我在建設時遇到的錯誤................. 未定義符號: 「_kIOMasterPortDefault」,引用自: _kIOMasterPortDefault $ non_lazy_ptr在main.o中 「_IOServiceGetMatchingServices」,從引用:在main.o中 「_IOObjectRelease」 _main,從引用:在main.o中 「_IOServiceMatching」 在main.o中 _main _main,從引用: _main in main.o 「_IOIteratorNext」,引用來自: _main in main。0 ld:符號未找到 collect2:ld返回1退出狀態 – Dili
您需要在項目中使用I/O Kit框架(即'IOKit.framework')和Core Foundation框架,否則會贏得' t鏈接。 – Hasturkun