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

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

  • Процесс Rogue Java останавливает мой компьютер
  • Как я могу запустить Java в ядре Arch Linux ядра grsec-hardend с помощью paxd?
  • Как изменить ассоциации файлов из командной строки?
  • Как запустить Java-процесс, который будет рассматриваться не как «java ...» в списке процессов?
  • Проблема запуска java на Debian: «ошибка при загрузке разделяемых библиотек: libjli.so»
  • Как установить java на CentOS VPS через ssh
  • Установка java 1.6, когда 1.7 уже установлен?
  • Mathematica не звучит под Ubuntu 11.04
  • Как развернуть приложение Java
  • Почему моя переменная среды не видна из командной строки?
  • Я установил sqlite. Теперь, где я должен его найти? Как установить соединение с java?
  • Linux и Unix - лучшая ОС в мире.