【问题标题】:Java Code For Pulling Hard Drive Information From Linux从 Linux 中提取硬盘信息的 Java 代码
【发布时间】:2011-11-21 02:20:24
【问题描述】:

我最近的任务是开发一个程序来监控来自多个硬盘的大量硬盘信息(序列号、制造商、类型等)。在我最初的研究中,我发现使用一些 C# 代码很容易做到这一点,并以这种方式创建了一个测试程序。不幸的是,我需要使用 linux 操作系统,这意味着 c# 无法使用。

我很好奇是否有人知道,或者可以指出我在 Java/C/C++ 中开发能够达到相同效果的应用程序的正确方向。我确实知道,如果您使用 Java,则必须使用 JNI,并且无论如何您都在使用 C/C++。

谢谢。

【问题讨论】:

  • C# 不一定非要放弃。听说过 Mono 项目吗?
  • sudo fdisk -lcat /proc/scsi/scsi 怎么样?无需编程!
  • @dario_ramos 我听说过 mono 项目,但我必须为该程序构建一个 GUI,我的印象是 C# 在这个意义上通过 Mono 非常有限。 Ishtar 我假设你的意思是我只是通过系统调用这些命令?
  • Max:是的,如果你想坚持使用 WinForms 或 WPF,它是有限的。您可以使用 Gtk,但如果您想坚持使用 Java,我认为@home 的回答可能会有所帮助

标签: java c++ c linux hard-drive


【解决方案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... */

我知道这不是一个完美的解决方案,但您可能想看看它。

【讨论】:

【解决方案2】:

根据您需要的确切信息,可能不需要使用 JNI。

Linux 在sysfsprocfs 虚拟文件系统中提供了大量有关硬件的信息。例如,您可以在 /sys/block/sda/device/model 中找到第一个磁盘的硬盘模型,您应该可以像使用任何其他文件一样在 Java 中读取它。

此外,您可以查看fdisk -l /dev/sda' andhdparm -I /dev/sdawhich both provide quite a bit of information. You can call these usingRuntime.exec()` 的输出并解析输出。

【讨论】:

    猜你喜欢
    • 2014-01-11
    • 2014-08-03
    • 2011-05-11
    • 2017-11-07
    • 1970-01-01
    • 2014-12-30
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多