O arquivo não parece ser regular, mas está listado como tal

2

Pelo que entendi, em arquivos do Linux / UNIX dos quais você obtém informações do sistema não são arquivos regulares, mas sim arquivos de dispositivos e mesmo assim eu encontrei um arquivo que parece não ser regular (devido a seu comportamento e tamanho) determinado por ls e outras funções C), mas é listado como tal (tanto por ls e ao testar com -f em um script sh).

O arquivo está no caminho /sys/class/thermal/thermal_zone0/temp em um Raspberry Pi, o resultado de ls indica: -r--r--r-- 1 root root 4096 janv. 18 13:55 /sys/class/thermal/thermal_zone0/temp

Deve haver um c ou b se for um arquivo de dispositivo.

A questão é que o tamanho detectado para este arquivo é de 4096 bytes, mas o tamanho real do arquivo é realmente muito menor.

Então, tenho algumas perguntas: por que esse arquivo não está listado como um arquivo especial? Quais funções C você deve usar para detectar com eficiência esses arquivos e como medir o tamanho de seu conteúdo quando eles são arquivos de "tamanho finito"?

Obrigado

    
por Trevör Anne Denise 18.01.2018 / 16:49

1 resposta

4

Você verá esses arquivos quase exclusivamente em /proc e /sys , já que eles não são realmente sistemas de arquivos reais, mais como interfaces para o kernel. Suponho que eles não estejam marcados como nós de dispositivo, já que os dispositivos seriam identificados pelos números de dispositivos maiores / menores e proc e sysfs não usam isso, mas identificam os arquivos virtuais neles de outras maneiras. / p>

Identificá-los geralmente não é um problema, pois poucos programas são usados para acessar arquivos em /proc ou /sys . Para muitos deles, os dados são gerados dinamicamente, portanto pode não haver qualquer maneira de medir o tamanho além de ler todo o conteúdo. Por exemplo. para os arquivos que testei, procurando até o final não fazer nada útil, a busca vai para a posição 4096 para arquivos que anunciam esse tamanho, independentemente do tamanho real do conteúdo.

    
por 18.01.2018 / 17:05