0

特定のサイズに達した場合にファイルを無効化/切り捨てるシェルスクリプトを書いている最中です。また、ファイルは常にプロセスによって開かれている/書き込まれています。ファイルを無効にするたびに、ファイル ポインタはファイルの先頭に再配置されますか、それとも以前の位置にとどまりますか? ファイルが切り詰められたら、ファイル ポインタをリセットできるかどうか教えてください。

4

2 に答える 2

2

ファイル ポインターの位置は、ファイルを開いているプロセスによってファイルがどのように開かれたかによって異なります。追加モードで開かれた場合、ファイルを切り捨てると、ファイルの最後に新しいデータが書き込まれることを意味します。これは、ファイルが切り捨てられた後に最初に書き込むときの最初でもあります。追加モードで開かれていない場合、ファイルの切り捨ては、ファイルの先頭に一連の仮想ゼロ バイトがあることを意味しますが、実際のデータは、最後の書き込みが終了した時点と同じポイントに書き込まれ続けます。 . ファイルが開かれたままではなく、他のプロセスによって再度開かれている場合、ほぼ同じルールが適用されますが、ファイルが最初に書き込まれる可能性が高くなります。

私の知る限り、別のプロセスのファイルポインタをリセットすることはできません。

于 2012-10-15T02:56:16.923 に答える
0

cron ジョブまたはこのようなものがタスクを実行します。4096バイトを超えるすべてのファイルを見つけてから、ファイルを無効にします

$ find -type f -size 4096c -print0 | while IFS= read -r -d $'\0' line; do cat /dev/null > $line; done

ここにリンクの説明を入力

于 2018-03-26T02:48:22.273 に答える