問題タブ [flock]
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.
php - fopen(file,w+) は、ファイルが flock() でロックされているかどうかを確認する前にファイルを切り捨てます
ファイル名とjsonオブジェクトを受け取ってテキストファイルに書き込む関数があります。
オブジェクトが更新され、ファイルの現在の内容を完全に置き換える必要があります。各サイト訪問者には、独自のファイルがあります。複数の急速な変更により、ファイルが によって切り捨てられfopen(file,w+)
、ロックされているために書き込まれないという状況が生じます。最終結果は空のファイルです。
それはとても普通の活動なので、これを行うための標準的な簡単な方法があると確信しています。理想的には、私が探しているのは、fopen
モードw+
またはモードを切り替える方法でファイルを切り捨てる前に、ファイルにロックがあるかどうかを確認する方法です。
fopen()
ファイルがロックされているかどうかを確認するために渡すファイル ハンドルを取得するために でファイルを切り詰める必要があるのは奇妙に思えますが、ファイルを切り詰めたflock()
だけなので、何の意味があるのでしょうか。
これが私がこれまで持っている機能です:
node.js - node.jsの単一プロセス内でファイルへのアクセスを同期するにはどうすればよいですか?
ディスク上のデータ ファイルを読み書きする Web サーバーがあります。単一の Web 要求でのみファイルに書き込みたいと思います。
これが私の問題を説明するサンプルプログラムです。「/tmp/rw.txt」に状態ファイルを保持し、Web ヒットごとに整数の内容をインクリメントします。このプログラムを実行してから のようなものを実行するab -n 10000 -c 1000 http://localhost:3000/
と、同じ値が複数のヒットによってファイルから読み取られ、複数回書き込まれることが示されます。
注: flock() とfs-extについては知っています。ただし、flock() はファイルを現在のプロセスにロックします。ここでのすべてのアクセスは同じプロセス内にあるため、flock() は機能しません (そして、この例はかなり複雑になります)。
また、通常はエクスプレス、非同期などを使用して、このほとんどを実行することに注意してください。例のために基本に固執するだけです。
c++ - stdvectorベースの群れで継承を使用する
現在、私は異なる振る舞いをする異なるサブクラスで群れを作るシステムを作らなければならない課題に取り組んでいます。私はOpenFrameworksとC++で作業しています。私はOpenFrameworksとC++にかなり慣れていません。
基礎として、私はこのコードを使用します: https ://sites.google.com/site/ofauckland/examples/ofxflocking-example
ただし、このコードの構造は、私が慣れているものとは異なります。'new...'で新しいクラスオブジェクトを作成する
私の質問は、2つの群れのクラスをどのように使用できるかということです。まず、たとえば別の色だけを使用します。
これまでに追加したサブクラスの1つは、次のとおりです。
スーパークラスBoidのボイド描画に仮想ボイド描画を使用し、boids.push_back(* new Team1());を使用しました。セットアップとマウスドラッグで。これにより、次のエラーが発生します。
- 前に予想されるタイプ指定子
Team1
)
前に期待Team1
- 呼び出しに一致する関数がありません
std::vector<Boid, std::allocator<Boid> >::push_back(int&)
コード全体:(リンクの問題を除外するために、すべてのコードが1つのtestapp.cppファイルに含まれています)
スーパークラスボイド:
コンストラクター:
サブクラス:
ベクトル初期化:
-
php - PHP flock()の非ブロッキングはまだブロックするのはなぜですか?
flock()関数を使用して、一時ファイルのロックを取得してスクリプトの別のインスタンスがすでに実行されているかどうかを確認しているので、次のインスタンスはファイルがロックされていないかどうかを確認する必要があります。
スクリプトは、同じブラウザから2つのインスタンスを同時に開いた場合に待機している間に、異なるブラウザから同時に2回ファイルを呼び出す場合に問題なく機能します。つまり、最初の呼び出しはロックを取得し、2番目の呼び出しはロックを待機して閉じません。
インスタンスがすでに機能しているファイルかどうかを確認する他の方法があるかもしれませんが、それらのほとんどは何かを実行してから元に戻します。私の使用例では、スクリプトは時間がかかるか、メモリ制限を超える可能性があるため、いつでも終了する可能性があります。なんらかの理由で
何か助けはありますか?
bash - bashの群れ:なぜ200?
そのスレッドについて: bash flock:ロックを取得できない場合は終了します
誰かが「200」の意味を説明してくれたら幸いです。
私は群れについて読んだことがあり、ファイル記述子を指定する場合は200のようですが、この数の何がそれほど良いのでしょうか。
bash - Bash:外部スクリプトを実行するときにもロックする方法
これが私のbashコードです:
私は2つのシェルからスクリプトを連続して実行しており、最初のシェルが「スリープ5」にある限り、すべてがうまくいきます。つまり、もう一方のシェルは起動しません。ただし、最初のターンで別のスクリプト(別のファイル)からコードを実行すると、2番目の実行が実行を開始します。
だから私はここに2つの質問があります:
スクリプトまたはその「子」がまだ実行されているときに、このスクリプトとそのすべての「子」が実行されないようにするにはどうすればよいですか。(「子」以外の別のスクリプトを実行するためのより適切な式が見つかりませんでした。申し訳ありません:))。
マニュアルページによると、-nを使用すると、ロックの取得に失敗したときにプロセスが終了しますが、私が見る限り、実行できるようになるまで待つだけです。私は何が欠けていますか?
bash - bash: flock はスクリプトをまとめて実行するのを防ぐことができますか?
質問の焦点を完全に絞ることができず、申し訳ありません。
ここで受け入れられた回答で説明されているように、スクリプトを同時に実行しないように flock を使用しようとしています: スクリプトが同時に実行されるのを防ぐ方法は?
この方法では、スクリプトをまったく実行できないなどの問題が発生する可能性があると誰かが言ったのを覚えています。
誰かがそのような可能性について知っていますか?
次のシナリオを試しました。
- スクリプトを実行した直後に実行します - 2 回目は完全に実行されました
- CTRL+でスクリプトを中断してCから、もう一度実行します - 2 回目の実行では問題ありません
- スクリプトの実行中にマシンを突然シャットダウンし、マシンの電源を入れてスクリプトを再実行します - 同じ結果: 問題ありません
もっと複雑な可能性について考えることができませんでした。
php - コマンドを 2 回実行すると、PHP 群れが既存のロックを検出しないのはなぜですか?
少し説明すると、Symfony2 のセットアップがあります。拡張した抽象コマンド クラスを使用しています。これらのバッチのいずれかを 1 回だけ実行できるようにします。私の目標は、私が開いて群がるロックファイルを作成して、phpスクリプトが可能な限り停止したときにロックが自動的に解放されるようにすることです。
これを実現するために、Lock という名前のクラスを作成しました。このクラスは SplFileObject を拡張し、基本的に *.lock をどこかに (通常は /var/lock/*) 作成するためのラッパーです。現在、このロックの検出に問題があります。fopenとflockを使用して機能するセットアップがありました。何らかの理由で、それはもう検出されません。
私は基本的に私がやりたいことをするためにOOP構造を作成しました:
- ロックファイルの名前を決定する (フォルダーを使用)
- ロック オブジェクトを作成する
- ディレクトリを作成し、存在しない場合はファイルをロックします
- SplFileObject::__construct() を呼び出す
- ファイルをロックする
これをハンドルでもsplファイルオブジェクトでも動作させることができません。スクリプトを実行して 15 秒間スリープさせ、別のコンソールで同じスクリプトを実行すると、スクリプトがファイルをロックできたという結果が得られ、flock は true を返します。同じスクリプトで同じロック ファイルに 2 つの Lock オブジェクトを作成すると、最初のロックでは true になり、2 番目のロックでは false になります。つまり、2 回目のロックの取得に失敗したことを意味します。スクリプトは機能しているようです。
ただし、両方のスクリプトで 2 つのロックを使用してスクリプトを 2 回実行すると、両方のスクリプトで True と false が返されます...つまり、スクリプト全体でファイルが適切にロックされていないようです:/
私が間違っていることを教えてくれる人はいますか?ファイル名を確認しましたが、スクリプトを実行した両方の時間で同じです。777、755、733 などの複数の権限を試しましたが、違いはありません。
私がそれを呼び出す方法(クラスの一部):
Lock.php
linux - QNAP NAS に node.js をインストールすると、「flock: Command not found」が表示されます
node.js を QNAP NAS にインストールしたいのですが、これは ipkg インストール パッケージを使用できる Linux OS です。しかし、ipkgにはnode.jsがありません...
Web フォーラムをhttp://forum.qnap.com/viewtopic.php?p=248556として参照し、V8 JavaScript エンジンをインストールしました。
次にnode.jsをインストールします
/opt/node でmakeと入力すると、次のようなエラー メッセージが表示されます。
make -C out BUILDTYPE=Release V=1 make[1]: Entering directory
/share/HDA_DATA/.qpkg/Optware/node/out' flock /share/HDA_DATA/.qpkg/Optware/node/out/Release/linker.lock g++ -pthread -rdynamic -o /share/HDA_DATA/.qpkg/Optware/node/out/Release/mksnapshot -Wl,--start-group /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/mksnapshot/deps/v8/src/mksnapshot.o /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/deps/v8/tools/gyp/libv8_base.a /share/HDA_DATA/.qpkg/Optware/node/out/Release/obj.target/deps/v8/tools/gyp/libv8_nosnapshot.a -Wl,--end-group make[1]: flock: Command not found make[1]: *** [/share/HDA_DATA/.qpkg/Optware/node/out/Release/mksnapshot] Error 127 make[1]: Leaving directory
/share/HDA_DATA/.qpkg/Optware/node/out' make: * [node] エラー 2
QNAP NAS(TS-119P2) には flock コマンドラインがありません。どうすればよいですか? 誰か助けてくれませんか?