私が理解したところ、Linux / UNIXでシステム情報を取得するファイルは通常のファイルではなくデバイスファイルですが、不規則に見えるファイル(lsによって決まる動作やサイズ、および他のC関数のため)を見つけました。ただし、そのまま表示されます(shスクリプトでlsと-fでテストするとき)。
Raspberry Piにファイルがあるパス/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関数を使用する必要がありますが、「制限されたサイズ」ファイルの場合、そのコンテンツのサイズを測定する方法は?
ありがとう
答え1
これらのファイルは実際には実際のファイルシステムではなくカーネルへのインターフェースに似ているため、およびこれらのファイルのみを/proc
ほとんど見ることができます。/sys
私は、デバイスがメジャー/マイナー番号で識別され、それを使用せずにproc
そのsysfs
中にある仮想ファイルを識別する別の手段を使用するため、デバイスノードとして表示されないと仮定します。
/proc
または、ファイルにアクセスするために使用されるプログラムがほとんどないため、これを識別するのは通常問題ではありません/sys
。これらの多くはデータが動的に生成されるため、すべてを読み取る以外にサイズを測定する方法がない可能性があります。たとえば、私がテストしたファイルの場合、最後まで検索は役に立ちませんでしたが、そのサイズを広告したファイルの場合、コンテンツの実際のサイズに関係なく、検索は場所4096に移動しました。