-1

この種の質問がたくさん聞かれていることは知っていますが、どれも役に立たないようです。setenv()UbuntuLinuxの関数呼び出しで環境変数を設定しました。ただし、プログラムはこの環境変数を使用していないようです。私が使用した場合getenv()、それは正しい値を取得しますが、プログラムへの出力は間違っています。ただし、export BLOCKSIZE=512シェルで使用すると、プログラムへの出力は正しくなります。プログラムから別のプロセスを生成していません。以下は私が行っていることのコードスニペットであり、私のプログラム全体ではありません。

これには何か理由がありますか?

4

2 に答える 2

1

ここでの問題は、UbuntuLinuxのデフォルトBLOCKSIZE1024notであるということです512。したがって、stat構造内のブロック、つまりフィールドをカウントすると、ブロック内では512バイトのブロックでしかカウントされないためst_blocks、通常とは異なる回答を受け取りました。これは、私のプログラムが環境変数のサイズを考慮する必要がないことを意味します。ここでの主な問題は、教科書で言われているように、Linuxが512バイトのブロックサイズを使用していると仮定することでした。lsstat

于 2012-10-06T21:35:21.983 に答える
0

示されているコードには、BLOCKSIZE環境変数の影響を受けるものは何もありません。

BLOCKSIZEの影響を受けるシステムコールはありません。512を使用している場所がわかりません。ls同じシステムコールを使用してo/sからデータを取得し、環境変数の設定に基づいて表示される値を調整するなどのプログラム。ただし、重要な点はls、カーネルコードのカーネルではなく、ユーザーコードによる決定であるということです。

コードは呼び出しlsやその他のプログラムではないため、環境変数の影響を受けることはありません。

于 2012-09-24T03:00:31.200 に答える