我對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. 如何在我的android應用程序中列出usb設備?
- 3. 爲Linux創建一個USB設備驅動程序
- 4. 創建一個虛擬USB設備
- 5. 如何列出連接到Mac的USB端口的設備?
- 6. 如何創建適用於所有設備的程序?
- 7. Mac OS X中的USB設備控制
- 8. 列出USB設備,選擇一個備份批處理文件
- 9. 如何列出yocto上連接的所有USB設備(打印機)?
- 10. 在Mac OS X上檢索USB設備的序列號問題
- 11. 有沒有一個命令行界面來列出在mac上的所有藍牙設備範圍?
- 12. Mac應用程序掛在USB設備上的ReadPipe
- 13. 如何創建一個音頻設備驅動程序來捕獲聲音Mac正在播放?
- 14. Android USB調試沒有在「設備更改」中列出mac os android studio 1.4.1
- 15. 如何創建一個查詢來列出所有組合的可能性
- 16. 如何查找在Linux(Ubuntu)中連接的所有USB設備?
- 17. USB調試未列出我的設備
- 18. 在公司所有設備(DevicePolicyManger)中如何列出白/黑應用程序
- 19. USB OTG Android和創建一個自動運行復制設備
- 20. windows - 如何枚舉所有連接的USB設備的設備路徑?
- 21. 如何爲所有iOS設備構建應用程序?
- 22. 如何從用於虛擬機的mac中彈出USB設備(無圖標)
- 23. Windows驅動程序* .INF如何定義多個USB設備
- 24. 控制一個無驅動程序的USB音頻設備
- 25. 如何識別唯一的USB設備?
- 26. 如何創建一個Menubar應用程序的Mac
- 27. 爲IOS中的所有設備創建唯一的UUID?
- 28. 程序中在子網中的所有設備的列表
- 29. 用C#和WMI列出USB設備
- 30. 列出USB設備像\\?\ Device \ HarddiskX \ PartitionY VBScript
感謝您的幫助。這非常有用,這與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