Какой способ безопаснее читать данные из / 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 секунд, например?

Ищете понимание того, какой из этих методов будет более умным.

One Solution collect form web for “Какой способ безопаснее читать данные из / sys”

Вариант B является предпочтительным решением как по соображениям производительности, так и по переносимости (см. Ниже), и я бы, вероятно, сразу прочитал все содержимое файла

String content = new Scanner (новый файл ("filename")). UseDelimiter ("\ Z"). Next ();

(из этого ответа StackOverflow )

Вы должны обрабатывать ошибки ввода-вывода, вызванные отсутствием файла, и читать его, когда файл равен нулю байтов (это может произойти, когда hwmon обрезает файл перед записью нового значения в файл, в то время как это очень короткое время, которое может бывает).


Вариант A заканчивается созданием 2 подпроцессов – вначале он создает оболочку, а затем передает командную строку процессу, который запускает то, что вы надеетесь, – это команда cat, которую вы ожидаете. Если процесс, на котором запущена ваша программа, имеет странную переменную среды пути, она может не запускать cat или запускать что-то, чего вы не ожидаете. Это можно смягчить, используя полный путь (обычно / bin / cat), который по-прежнему зависит от системы.

В целом почти всегда лучше не создавать внешние процессы, если у вас нет другого выбора.

  • X высокий процессор при использовании приложений Java
  • Debian и jdk 1.7
  • RPM: ошибка jre-зависимостей, хотя эта версия JRE установлена
  • Как я могу заставить эту команду java действовать в каждом файле, найденном командой find?
  • Процесс Java часто убивается OOM - Killer на обновленном оборудовании
  • получить использование ЦП VM (linux) с помощью java
  • вызов javac из CentOS 7
  • Как найти путь, где установлен jdk?
  • Как удалить libgcj из Debian?
  • Linux Mint Petra (16) Обновление Java от JRE 7 до JRE 8 разбивает графическую систему?
  • Что делать, чтобы запустить приложение GUI Java в chrooted среде?
  • Linux и Unix - лучшая ОС в мире.