我試圖學習如何從Mac OS X中的PCI設備獲取信息。到目前爲止,我還沒有能夠在sysctl(3)中找到任何有關它的信息。似乎BSD的舊devinfo(3)設施不可用。Mac OS X,C用於讀取PCI設備信息的設備
我需要一個C工具爲此,我知道有一個Objective C的I/O套件框架,但我不能使用它。
我追求的具體信息非常基本,只是供應商和設備ID。
我試圖學習如何從Mac OS X中的PCI設備獲取信息。到目前爲止,我還沒有能夠在sysctl(3)中找到任何有關它的信息。似乎BSD的舊devinfo(3)設施不可用。Mac OS X,C用於讀取PCI設備信息的設備
我需要一個C工具爲此,我知道有一個Objective C的I/O套件框架,但我不能使用它。
我追求的具體信息非常基本,只是供應商和設備ID。
I/O套件是設備信息的系統框架。它不是Objective-C API;相反,Apple使用C++的受限子集。引述I/O Kit Fundamentals文件,
蘋果認爲是I/O Kit的多種編程語言,並選擇℃的限制的子++。
C++的選擇有幾個原因。 C++編譯器已經成熟,並且該語言爲系統編程提供了支持。另外,已經有一個擁有C++經驗的Macintosh(和BSD)開發者的大型社區。
受限子集不允許C++的某些特徵,包括
- 例外
- 多重繼承
- 模板
- 運行時類型信息(RTTI)-the I/O工具包使用其自己的執行運行時間分類系統
這些功能被放棄,因爲它們被視爲聯合適合在多線程內核中使用。如果你覺得你需要這些功能,你應該重新考慮你的設計。您應該能夠使用具有這些限制的I/O套件編寫任何需要的驅動程序。
如果你不能使用C++,那麼一個替代方案是讓你的C程序調用/usr/bin/ioreg
並解析它的結果。
編輯:你可能想看看Accessing Hardware from Applications文件。它看起來像訪問I/O註冊表大部分(如果不是全部)用C代碼完成的,只需要一點Core Foundation。
非常感謝您提供非常有價值的信息。我會拭目以待,如果沒有人聽到他們的聲音,那麼我會假設沒有任何設施可以做到這一點,不涉及其他語言而不是C. – 2011-01-21 14:56:32