ロックされたファイルをシミュレートする方法は?

ロックされたファイルをシミュレートする方法は?

ファイルをロックしていくつかのテストを実行し、ファイルのロックを解除したいと思います。どうすればいいですか?コマンドライン、Perl、またはシェルスクリプトを使用できます。

ファイルをロックする理由は、ftpApacheサーバーに接続するときにファイルを削除すると、「実行中のプログラムを含むファイルを開いたり削除したりできません」というエラーメッセージが表示されるためです。ftpこのエラーが発生したことを確認するために、deleteコマンドの代わりにmoveコマンドを使用してテストしたいと思いました。ファイルをロックすると、このエラーが発生するかどうかをテストしたいと思います。

答え1

クイック:ファイルロックは通常(私の知る限り)高級言語でのみサポートされています。

Perlの例では、ここから始めることができます。https://stackoverflow.com/questions/34920/how-do-i-lock-a-file-in-perlまたはPerlの古典の一つhttps://docstore.mik.ua/orelly/perl/cookbook/ch07_12.htm(SSL証明書の問題を参照)または同様の問題。

シェルスクリプトの場合、JdeBPの説明であるファイルがロックされた理由を考慮する必要があります。回答に従って、ファイルの書き込み権限を一時的に変更し、ファイル名を変更し、名前が変更されたファイルを処理した後にファイル名を変更し直し、コピーを処理してから元のファイルを再構築するなど、いくつかの戦略を検討します。できます。

答え2

クラスタコマンドを使用できます。羊飼い記録保管所

そこで学びました。https://stackoverflow.com/questions/24388009/linux-flock-how-to-just-lock-a-file

以下は、10秒というファイルをロックするスクリプトです2.txt(リンクのスクリプトを少し変更しました)。

exec 3>2.txt    # open a file handle; this part will always succeed
flock -x 3      # lock the file handle; this part will block
sleep 10
exec 3>&-

関連情報