wcとstatが/proc/[pid]/cmdlineに対して異なる結果を生成するのはなぜですか?

wcとstatが/proc/[pid]/cmdlineに対して異なる結果を生成するのはなぜですか?

wc原因を把握してstatいろいろな情報提供をしようとします/proc/[pid]/cmdline

wc私のシェルcmdlineファイルサイズが6バイトであるとしましょう。

$ wc --bytes /proc/$$/cmdline
6 /proc/10425/cmdline

statファイルサイズが0バイトであることを示します。

$ stat --format='%s' /proc/$$/cmdline
0

file同意するstat

$ file /proc/$$/cmdline
/proc/10425/cmdline: empty

cat次の出力を提供します。

$ cat -vE /proc/$$/cmdline
-bash^@

これは他の* nixオペレーティングシステムではなくLinux上で行われます。

statプログラムにwcファイルのバイト数を計算する他のアルゴリズムはありますか?

ベストアンサー1

以下のファイルは通常の/procファイルではなく、カーネルによって動的に生成された仮想ファイルです。ほとんどの場合(すべて?)システムはサイズを事前に計算しませんが、それを読み取るプログラムは目的のデータを取得します。

wcあなたがしたことと、例えば何をするのかというstat違いは、lsここwcでファイルを開いて読んで何を得るかを計算し、システムコールを使用してstatサイズを含むファイルのメタデータを要求することです(たとえば、すべてをインポートすることもできます)。 。所有者と権限)。仮想ファイルについても同じ結果は得られません。lsstat()

egを実行すると、ls -l /proc/$$/ほとんどのファイルからデータを読み取ることができますが、サイズが0のファイルがたくさん表示されます。

デバイスノード/dev/sdaは似ていますが、その場合はlsサイズさえ表示されず、デバイス番号のみが表示されます。

特にfilefile -sデータのみ読み込み特殊ファイルかどうかは気にしないように要求できます。

おすすめ記事