Como é que posso apenas enviar inteiros positivos para este arquivo?

1

Se eu canalizar uma string consistindo apenas de um inteiro positivo em /sys/class/backlight/intel_backlight/brightness , ele funciona. Mas se eu canalizar uma string contendo qualquer outra coisa que eu tentei, recebo uma mensagem de erro:

$ sudo su -c "echo 10 >/sys/class/backlight/intel_backlight/brightness"
$ sudo su -c "echo -- -1 >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument
$ sudo su -c "echo aa >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument
$ sudo su -c "echo 10.2 >/sys/class/backlight/intel_backlight/brightness"
bash: line 0: echo: write error: Invalid argument

Primeiro, pensei que esse era um tipo especial de arquivo, mas parece ser um arquivo normal:

$ file /sys/class/backlight/intel_backlight/brightness
/sys/class/backlight/intel_backlight/brightness: ASCII text

O que está acontecendo?

    
por UTF-8 05.03.2017 / 00:47

1 resposta

1

Você só pode escrever inteiros não negativos para este arquivo porque é um arquivo especial e o kernel rejeita qualquer outra entrada. Não é um arquivo especial no sentido de ter um tipo de arquivo especial, mas é um arquivo especial porque está em um sistema de arquivos especial. Quando você acessa um sistema de arquivos “normal”, o kernel armazena o conteúdo do arquivo em um disco sem interpretá-lo. Mas quando você acessa arquivos em /proc ( procfs ) ou /sys (sysfs ), os dados não são armazenados em um disco, o acesso invoca o código do kernel personalizado. Para um arquivo como /sys/class/backlight/intel_backlight/brightness , esse código personalizado deseja um número inteiro entre 0 e algum máximo dependente de hardware e, se você tentar gravar qualquer outra coisa, a chamada write falhará com o status de erro EINVAL.

    
por 06.03.2017 / 01:35

Tags