5

いくつかのファイルを読み取り、しばらくの間メモリにロードしておく Java コードがあります。ファイル ハンドルは読み取り後も保持されます。ここでの問題は、ユーザーが「DEL」キーまたは rm コマンドを使用してこれらのファイルを削除できないようにすることです。

ファイルハンドルを保持することでWindowsでも同じことを実現できましたが、Unixではrmはファイルのロックを尊重しません。私も試してみFilechannel.lock()ましたが、どちらも役に立ちませんでした。

任意の提案をいただければ幸いです。

4

3 に答える 3

6

ハンドルが開いている限り、ディレクトリからファイルを削除できますが、ファイルを削除することはできません。つまり、ファイルを閉じるかプロセスが終了するまで、ファイルは削除されません。

Filechaanel.lock() も試しましたが、どちらも役に立ちませんでした。

これは、変更されているのはファイルではなくディレクトリであるためです。たとえば、ファイルへの書き込みアクセス権はあるがディレクトリへのアクセス権がない場合、ファイルを削除することはできません。

于 2013-02-05T14:19:44.207 に答える
3

ファイルをロックするために使用できるchattrを調べることもできます。

chattr +i filename

ファイルを削除できないようにする必要があります。その後、次の方法で再度削除可能にすることができます...

chattr -i filename 
于 2013-02-05T14:21:27.043 に答える
1

これに対する純粋な Java ソリューションはありません。実際、厄介な結果を招く可能性のない解決策はまったくないと思います。根本的な問題は、UNIX / LINUX には一時的にファイルを強制的にロックする方法がないことです。(ファイルをロックするための Linux syscall は ですがflock、群れスタイルのロックは任意です。ファイルを気にしないアプリケーションはflock、ファイルに対する他のアプリケーションのロックの影響を受けません。)

あなたができる最善のことはchattr +i、ファイルに「不変」属性を設定するために使用することです。残念ながら、これには他の影響があります。

  • 不変ファイルは、書き込みもリンクもできません。

  • 属性を設定解除せずにアプリケーションがクラッシュすると、不思議なことに変更または削除できないファイルがユーザーに残されます。sudo や su でもありません。

于 2013-02-05T14:24:38.083 に答える