Qual é a maneira mais segura de ler dados de / sys

0

Eu estou tentando escrever um programa que monitore a temperatura de vários componentes de hardware.

A linguagem que escolhi para isso é Java. Agora existem duas maneiras de ler as temperaturas:

a) Faça um cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input em Java com Process process = Runtime.getRuntime().exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input");

b) Crie um File apontando para /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input e abra um BufferedReader nesse arquivo para ler a temperatura

O primeiro parece estranho, você invoca outro programa que lê o arquivo e imprime o conteúdo quando você realmente sabe tudo onde o arquivo está localizado.

O segundo me faz pensar, ele causará algum problema quando o kernel do Linux fizer uma atualização para esse arquivo a cada segundo e eu tentarei abrir um BufferedReader nele a cada 7 segundos, por exemplo?

Procurando informações sobre quais desses métodos seriam mais inteligentes.

    
por Kaspar 04.03.2015 / 18:39

1 resposta

2

A opção B é a solução preferida por razões de desempenho e portabilidade (veja abaixo), e eu provavelmente leria todo o conteúdo do arquivo de uma só vez

String content = new Scanner (novo arquivo (“nome do arquivo”)). useDelimiter (“\ Z”). next ();

(desta resposta do StackOverflow )

Você deve manipular os erros de E / S causados pelo arquivo que não está presente e lê-los quando o arquivo é zero bytes (isso pode ocorrer quando hwmon trunca o arquivo antes de gravar o novo valor no arquivo, embora seja muito breve tempo que isso pode acontecer).

A opção A acaba criando dois subprocessos - primeiro cria um shell e passa a linha de comando para o processo, que inicia o que você espera que seja o comando cat que você está esperando. Se o processo que está executando seu programa tiver uma variável de ambiente de caminho estranha, ele poderá falhar ao executar o comando cat ou executar algo que você não está esperando. Isso pode ser mitigado usando o caminho completo (geralmente / bin / cat), isso ainda é dependente do sistema.

No geral, é quase sempre melhor não gerar processos externos, a menos que você não tenha outra escolha.

    
por 04.03.2015 / 21:31