問題タブ [file-locking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
743 参照

java - それに応じてファイルをロックおよび更新する

:ファイルをロックおよびロック解除する方法に関する他の投稿を読みました。気づかなかった特別なものは見つかりませんでした。そこで、手元にある問題をよりよく理解するために、ここにシナリオを配置します。

私の経験では、FileChannel.lockは、jvmの複数のインスタンスからの異なるオブジェクトがファイルをロックおよび更新しようとしているときにファイルのロックおよびロック解除を保証しません。

私のアプリケーションのシナリオは次のとおりです。ファイルを更新する3つの別個のプログラムがあります。これらのプログラムは、さまざまなjvmインスタンスで実行されています。プログラムがA、B、Cであるとします。ファイルはFです。Aがファイルをロックした場合、F、B、およびCは、Fが解放されるのを待ってから、他のプログラムの1つがファイルを取得できるようにする必要があります。プログラムが同じjvmインスタンスで実行されている場合、これは正常に機能します。残念ながら、これは複数のjvmインスタンスでは機能しません。

Fを更新する必要があるかどうかを示すフラットファイルを作成するという別のアイデアがありました。そのフラットファイルのコンテンツは、LOCKEDまたはUNLOCKEDのいずれかになります。デフォルト/初期値はロック解除されます。したがって、プログラムの1つがFを更新する場合は、フラットファイルのフラグを確認する必要があります。フラグがLOCKEDの場合、待機する必要があります。ただし、このアプローチでは問題があります。複数のプログラムがフラットファイルをまったく同時に開いて「UNLOCKED」を表示した場合、またはフラットファイルがUNLOCKEDを読み取るのを待っていた2つのプログラムが、ファイルの読み取りを正確に同時に表示した場合はどうなりますか。ロック解除されました」?

何か案が?

0 投票する
1 に答える
1627 参照

unix - ファイルのr/wロックとリンク解除

次の問題があります。各セッションデータがセッションIDで名前が付けられた単純なファイルに保存されるファイルシステムベースのセッションストレージを作成したいと思います。

次のAPIが必要です:write(sid,data,timeout)、、ここread(sid,data,timeout)remove(sid) sid ==ファイル名、また、すべてのタイムアウトセッションを削除する可能性のあるある種のGCが必要です。

単一のプロセスで作業する場合は非常に単純なタスクですが、複数のプロセスで作業する場合、またはNFSを介して作業する場合でも、絶対に簡単ではありません。

私が考えた最も簡単な解決策は次のとおりです。

ファイルのリンク解除がファイル名で機能し、ファイルロックがファイル記述子で機能するという最大の問題。したがって、上記は次のシナリオでは機能しません。

誰かがそのような問題がどのように解決されるかについての考えを持っていますか?ファイルロックとファイル削除を組み合わせたり、ファイルをアトミックに操作したりできるトリックはありますか?

ノート:

  • データベースを使いたくない、
  • Unixの解決策を探しています
  • ソリューションは、fcnl、open、close、unlinkなどの標準のPOSIX呼び出しで機能する必要があります

ありがとう。

明確化の主な問題は、ファイルの操作(names --unlink)は、ファイル記述子の操作--lockingを使用してアトミックに実行する必要があることです。

  • 開いてリンクを解除します-ファイルを操作します
  • fnctl--記述子を処理します
0 投票する
3 に答える
1367 参照

winapi - 単一の操作としてのファイルのロック解除と削除

これは、ファイルのr/wロックとリンク解除の重複ではないことに注意してください。(違い-プラットフォーム。ロックや削除などのファイルの操作はまったく異なるセマンティクスを持っているため、結果は異なります)。

次の問題があります。各セッションデータがセッションIDで名前が付けられた単純なファイルに保存されるファイルシステムベースのセッションストレージを作成したいと思います。

次のAPIが必要です:write(sid,data,timeout)、、ここread(sid,data,timeout)remove(sid) sid ==ファイル名、また、すべてのタイムアウトセッションを削除する可能性のあるある種のGCが必要です。

単一のプロセスで作業する場合は非常に簡単な作業ですが、複数のプロセスで作業する場合や共有フォルダーで作業する場合でも、絶対に簡単ではありません。

私が考えた最も簡単な解決策は次のとおりです。

しかし、AFIAK私はDeleteFile開いたロックされたファイルを呼び出すことができません(ファイルロックが必須ではなく、開いたファイルに対してリンク解除が許可されているUnixとは異なります。

しかしDeleteFile、ロックループの外に置くと、悪いシナリオが発生する可能性があります

誰かがそのような問題がどのように解決されるかについての考えを持っていますか?ファイルロックとファイル削除を組み合わせたり、ファイルアトミック(Win32)で操作したりできるトリックはありますか?

ノート:

  • データベースを使いたくない、
  • NT5.01以降のWin32APIのソリューションを探しています

ありがとう。

0 投票する
4 に答える
5993 参照

bash - flock によって実行されたコマンドの終了コードを確認するにはどうすればよいですか?

こんにちは。bash スクリプトを実行する cron ジョブを設定していますが、前のスクリプトが終了する前に次のジョブが開始されるのではないかと心配です。flock少しグーグルで調べてみると、これに対処する一般的な方法は、次の方法で使用されるコマンドであることがわかります。

これはうまくいきます。ただし、の終了コードを確認したい場合はどうすればよいですmyscript.shか? 返される終了コードはflock's によって上書きされるため、正常に実行されたかどうかを知る方法はありません。

0 投票する
0 に答える
3496 参照

windows - プログラムで(b)ファイルをロックするプロセスを決定します(Windows> = XPの場合)

プロセスPから、どの他のプロセスP'がファイルをロックしていて、Pがそのファイルを再作成できないようにするかをプログラムで判断するにはどうすればよいですか?

それを行うためのツールがあることは知っていますが、どのようにしてそれを達成するのでしょうか。

(コンテキスト:ファイルがロックされているため、夜間に実行されるバッチプログラムは失敗します。翌日に管理ツールを実行すると、有用な情報を取得するには遅すぎる可能性があります。したがって、バッチプログラム自体が原因を特定できれば便利です。)

編集:複雑さを追加:ファイルはDFSに存在し、P'はPと同じマシンで実行されない可能性があります(ただし、実行される可能性があります)。しかし、ローカルで機能するソリューションは良い始まりです。

0 投票する
2 に答える
4975 参照

java - Javaでファイルをロックしているスレッドを見つける方法は?

プログラム内の別のスレッドが以前に処理したファイルを削除しようとしています。

ファイルを削除できませんが、ファイルを使用している可能性のあるスレッドを特定する方法がわかりません。

では、Javaでファイルをロックしているスレッドを見つけるにはどうすればよいですか?

0 投票する
2 に答える
33 参照

c# - あるサービスはファイルに追加し、別のサービスはファイルを切り捨てます

RS-232 デバイスを制御し、アクションをファイルに記録するサービスがあります。ログ ファイルを 1 行ずつ読み取り、データベースに対していくつかのクエリを実行してから、すべてのログを削除する別のサービスを作成します。

私の懸念は、ファイルの読み取りと書き込みの競合です。たとえば、ロガー サービスがファイルを開いて新しい行を追加するのと同時に、レプリケーター サービスがファイルを開いて "" を書き込むので、その内容を切り捨てます。

私の状況を明確にするための提案はありますか?

0 投票する
3 に答える
37953 参照

java - 読み取りおよび書き込み用のJavaFileLock

特定の移動関連コマンドが含まれているファイルを読み取るために、cronからかなり頻繁に呼び出されるプロセスがあります。私のプロセスは、このデータファイルの読み取りと書き込みを行う必要があります。また、この間、他のプロセスがこのデータファイルにアクセスしないように、プロセスをロックしたままにしておく必要があります。ユーザーは完全に別のプロセスを実行して、この同じデータファイルに(潜在的に)書き込み/追加することができます。これらの2つのプロセスを適切に実行し、一度に1つのファイルにのみアクセスするようにします。

nio FileLockは私が必要としていたもののようでした(自分のセマフォタイプのファイルを書くことはできませんでした)が、読み取るためにロックするのに問題があります。ロックと書き込みは問題なく実行できますが、読み取り時にロックを作成しようとすると、NonWritableChannelExceptionが発生します。読み取りのためにファイルをロックすることさえ可能ですか?RandomAccessFileは私が必要としているものに近いようですが、それを実装する方法がわかりません。

失敗するコードは次のとおりです。

例外はFileLock行でスローされます。

JavaDocsを見ると、

元々書き込み用に開かれていなかったチャネルに書き込もうとしたときにスローされるチェックされていない例外。

しかし、私は必ずしもそれに書き込む必要はありません。書き込み目的でFileOutpuStreamなどを作成しようとすると、同じファイルでFileInputStreamを開こうとするまでは問題ありません。

0 投票する
4 に答える
311 参照

perl - Linux デーモンは、SAMBA 経由でアクセスするファイルへの書き込みを Windows プログラムが停止したことをどのように知ることができますか?

私は、Dazzle と呼ばれる USPS 配送パッケージと連動するシステムを開発しています。このシステムの一部には、タブ区切りの値ファイルを取得し、それらを Dazzle が認識する XML に変換し、ラベル生成のために Dazzle に渡すことを目的とする監視デーモンが含まれています。そして、この部分はうまく機能します。ただし、私がやりたいことは、Dazzle が生成する出力ファイルを解析してデータベースにインポートすることです。

ここで、Dazzle は Windows 上で動作することに注意してください。私の監視デーモンは Perl で書かれており、Linux で動作します。私の Linux システムには、Samba 経由でマウントされた Dazzle の入力および出力ディレクトリがあります。

Dazzle が出力ファイルの書き込みを開始してから完了するまでには、かなりの遅延があります。私が知りたいのは、Dazzle が出力ファイルの書き込みを完了するのをどのように待つことができるかということです。ファイルを開いて実行しようとしましflock($fh, LOCK_SH)たが、うまくいかなかったようです。

編集:以下の「mobrule」のコメントに基づいたアイデアがあります。Dazzle は出力ファイルを XML で書き込みます。出荷の各パッケージはタグで囲まれ、ドキュメント全体がタグで囲まれています。そのため、ファイルが完了する前に読み取りを開始した場合は、適切な終了タグが表示されるのを待ってからアクションを実行できます。

また、私が現在行っていることについても言及する必要があります。出力 XML ファイルが作成されたことを検出すると、それを解析しようとします。その解析が失敗した場合は、スリープして再試行します。それが失敗した場合、私は 2 倍長く寝てから、もう一度やり直します。これは、64 秒のタイムアウトでのテストでかなりうまく機能しました。

0 投票する
1 に答える
414 参照

.net - ファイルを安全にロックしてから移動しますか? ウィンドウズ

ファイルがあり、データベースに行を挿入する前にファイルが存在することを確認する必要があります。挿入した後、ファイル名の一部として PK を使用し、それを別の場所に移動する必要があります。

存在するかどうかを確認してからロックして、データベースに挿入できるようになるまで削除できないようにし、ロックを解除しても削除されずにファイルを移動するにはどうすればよいですか?

また、ファイルが使用中の可能性があります。ファイルを安全な場所にコピーしてから、そのファイルを移動することを考えています。この場合、読み取りに使用されているファイルをコピーする必要があります。上記の手順を安全に行うにはどうすればよいですか?

.NET の使用