我试图编写一个程序来监视各种硬件组件的温度。
我为此选择的语言是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秒打开一个文件吗?
寻找关于这些方法中哪一种更聪明的见解。
从性能和可移植性的角度来看,选项B是首选的解决方案(请参阅下文),我可能会一次读取文件的全部内容
字符串内容=新的Scanner(新的File(“文件名”))。useDelimiter(“ \ Z”)。next();
(来自这个StackOverflow答案)
您应该处理由于文件不存在而导致的I / O错误,并在文件为零字节时读取它(当hwmon在将新值写入文件之前将其截断文件时,可能会发生这种情况,虽然时间很短,但是可以发生)。
选项A最终创建2个子进程-首先,它创建一个Shell,然后将命令行传递给该进程,该进程将启动您希望的cat命令。如果运行程序的进程具有奇怪的路径环境变量,则可能无法运行cat或运行您不期望的操作。可以通过使用完整路径(通常是/ bin / cat)来缓解这种情况,但这仍然取决于系统。
总体而言,除非没有其他选择,否则最好不要生成外部进程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句