web-dev-qa-db-ja.com

ファイルは規則的ではないようですが、そのようにリストされています

私の理解では、システム情報を取得するLinux/UNIXファイルは通常のファイルではなく、デバイスファイルですが、(lsによって決定される動作とサイズのために)通常ではないように見えるファイルに遭遇しました。およびその他のC関数)が、そのようにリストされています(lsによって、およびshスクリプトで-fを使用してテストする場合の両方)。

ファイルはRaspberryPiのパス/sys/class/thermal/thermal_zone0/tempにあり、lsの結果は次のようになります。
-r--r--r-- 1 root root 4096 janv. 18 13:55 /sys/class/thermal/thermal_zone0/temp

デバイスファイルの場合は、cまたはbが必要です。

問題は、このファイルで検出されたサイズが4096バイトですが、ファイルの実際のサイズは実際にははるかに小さいことです。

だから私はいくつか質問があります:なぜこのファイルは特別なファイルとしてリストされていないのですか?このようなファイルを効率的に検出するためにどのC関数を使用する必要がありますか。また、「有限サイズ」のファイルである場合にコンテンツのサイズを測定する方法を教えてください。

ありがとうございました

2
Trevör

このようなファイルは、実際には実際のファイルシステムではなく、カーネルへのインターフェイスのようなものであるため、ほぼ排他的に/proc/sysに表示されます。デバイスはメジャー/マイナーデバイス番号で識別され、procsysfsはそれを使用しないため、デバイスノードとしてマークされていないと思いますが、他の手段でそれら。

/procまたは/sysのファイルにアクセスするために使用されるプログラムはほとんどないため、通常、それらを識別することは問題ではありません。それらの多くでは、内部のデータは動的に生成されるため、すべてのコンテンツを読み取る以外にサイズを測定する方法がない場合があります。例えば。私がテストしたファイルの場合、最後までシークしても何の役にも立ちませんでした。コンテンツの実際のサイズに関係なく、シークはそのサイズをアドバタイズするファイルの位置4096に移動します。

4
ilkkachu