2011-09-20 18 views
1

我最近一直負責制定一個方案,監測一堆從多個硬盤驅動器的硬盤驅動器的信息(序列,製造商,類型等)。在我最初的研究中,我發現使用一些C#代碼很容易,並以這種方式創建了測試程序。不幸的是,我需要使用Linux操作系統,這意味着c#不在桌面上。Java代碼拉動硬盤的信息從Linux

我很好奇,如果任何人知道,或者可以點我在發展中的Java/C/C++應用程序,將達到同樣的效果的正確方向。我知道如果你使用Java,你必須使用JNI,而且你在那個時候使用C/C++。

謝謝。

+1

C#不一定假表。聽說過單聲道項目? –

+4

'sudo fdisk -l'或'cat/proc/scsi/scsi'如何?無需編程任何東西! – Ishtar

+0

@dario_ramos我聽說過單聲道項目,但我必須爲該程序構建一個GUI,並且我的印象是,通過Mono,C#在這個意義上非常有限。 伊什塔爾我假定你的意思,我只是呼籲通過系統的那些命令? – Max

回答

2

根據確切信息,你需要有可能是沒有必要使用JNI。

Linux會提供有關sysfsprocfs虛擬文件系統中可用硬件的大量信息。舉例來說,你可以找到在/ SYS /塊/ SDA /設備/模式,你應該能夠在Java中閱讀就像任何其他文件拳頭磁盤的硬盤型號。

此外,你可以看看輸出fdisk -l /dev/sda' and hdparm -I/dev/sda which both provide quite a bit of information. You can call these using Runtime.exec()`並分析輸出。

1

我不知道任何Java庫會讓您的生活更輕鬆,但如果您希望實現支持不同操作系統的獨立於操作系統的解決方案,則應該查看java.lang.Runtime,從而使您可以執行外部進程。您可以爲每個定義(CLI)命令的操作系統維護一個映射,以檢索所需的信息。這可能是比實現了一堆使用JNI本地調用更簡單:

Process p = Runtime.getRuntime().exec("df -h"); 
p.waitFor(); 

InputStream is = p.getInputStream(); 

/* work with command line output... */ 

我知道這不是一個完美的解決方案,但你可能想看看它。

+0

謝謝!我會看看它。 – Max

+0

@Max:fyi:http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information – home