从/sys读取数据哪种方式更安全

从/sys读取数据哪种方式更安全

我正在尝试编写一个程序来监视各种硬件组件的温度。

我选择的语言是Java。现在有两种方法可以读取温度:

a)cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input用Java做一个Process process = Runtime.getRuntime().exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input");

b) 创建一个File指向/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input并打开BufferedReader该文件以读取温度

第一个看起来很奇怪,当您实际上已经准备好知道文件所在位置时,您调用另一个程序来读取文件并打印内容。

第二个让我思考,当 Linux 内核每秒更新该文件并且我将尝试BufferedReader每 7 秒打开一个文件时,会导致任何问题吗?

寻找这些方法中哪种更聪明的见解。

答案1

出于性能和可移植性原因(见下文),选项 B 是首选解决方案,我可能会立即读取文件的全部内容

字符串内容 = new Scanner(new File(“文件名”)).useDelimiter(“\Z”).next();

(由此堆栈溢出答案

您应该处理由文件不存在引起的 I/O 错误,并在文件为零字节时读取它(当 hwmon 在将新值写入文件之前截断文件时可能会发生这种情况,而这是很短的时间发生)。


选项 A 最终创建了 2 个子进程 - 第一个它创建一个 shell,然后将命令行传递给该进程,该进程启动您所期望的 cat 命令。如果运行程序的进程有一个奇怪的路径环境变量,它可能无法运行 cat,或者运行一些你不期望的东西。这可以通过使用完整路径(通常为 /bin/cat)来缓解,这仍然取决于系统。

总的来说,除非别无选择,否则最好不要生成外部进程。

相关内容