問題タブ [fifo]
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.
bash - bashでFIFOをブロックしない問題
私はいくつかのTeamFortress2サーバーを実行していて、小さな管理スクリプトを書きたいと思っています。
基本的に、TF2サーバーはサーバーコンソールを提供するfgプロセスであるため、サーバーを起動し、ステータスを入力して、サーバーから回答を得ることができます。
これで、コマンドsm_reloadadminsをすべてのサーバーに送信するスクリプトを作成したいと思います。これを行うために私が見つけた最良の方法は、パイプという名前のFIFOを使用することです。今私がやりたいのは、このパイプを読み取り専用にし、サーバープロセスをブロックしないようにすることです。これにより、パイプに書き込み、サーバーがそれを実行できますが、それでもサーバーの1つをコンソール経由で書き込みたいので、サーバーのfgプロセスとステータスを入力して回答を印刷します。
私はこれを試しました(serverfifoがmkfifo serverfifoであると仮定します):
動作していない場合、パイプに何かが書き込まれるまでサーバーは起動しません。
これは実際にはかなりうまく機能しています。サーバーのコンソール出力を確認でき、FIFOに書き込むことができ、サーバーはコマンドを実行しますが、コンソールを介してサーバーに書き込むことはできなくなります。また、パイプ(サーバーを終了する必要があります)に「exit」と記述し、それを画面で実行している場合、何らかの理由で画面ウィンドウが強制終了されます(wtfはなぜですか?)。
サーバーがブロックせずにFIFOを読み取る必要があるだけで、サーバー自体のすべてのキーボード入力をサーバーに送信し、すべてのサーバー出力をコンソールに書き込む必要があります。
それは可能ですか?はいの場合、どのように?
c++ - FIFOにはどのSTLコンテナを使用する必要がありますか?
どのSTLコンテナが私のニーズに最も適していますか?私は基本的に10要素幅のコンテナを持っており、最も古い要素を使用push_back
しながら(約100万回)新しい要素を継続的に使用しています。pop_front
私は現在std::deque
、タスクにaを使用していますがstd::list
、自分自身を再割り当てする必要がないため、aの方が効率的かどうか疑問に思っていました(または、std::deque
aをstd::vector
?と間違えている可能性があります)。それとも、私のニーズに合ったさらに効率的なコンテナはありますか?
PSランダムアクセスは必要ありません
python - Pythonで一時FIFO(名前付きパイプ)を作成しますか?
Python で一時 FIFO (名前付きパイプ) を作成するにはどうすればよいですか? これはうまくいくはずです:
ただし、 Python Docs 11.6の大きな警告と、非推奨であるため削除される可能性があるため、躊躇しています。
編集:私が試したことは注目に値しますtempfile.NamedTemporaryFile
(そして拡張によってtempfile.mkstemp
)が、os.mkfifo
スローします:
OSError -17: ファイルは既に存在します
mkstemp/NamedTemporaryFile が作成したファイルに対して実行すると。
latex - 名前付きパイプ (fifo) で LaTeX を呼び出しますか?
Unixの名前付きパイプfifoでLaTeX を実行しています。fifo のようなものを作成します。
次に、LaTeX を次のように実行します。
このプロセスはブロックされ、別のシェルから fifo に書き込むまで出力がありません。
$ latex fifoの出力は次のようになります。
ただし、LaTeX プロセスが終了することはありません。LaTeXを終了するにはどうすればよいですか? chr(0) と chr(4) (つまりctrl-d ) を送信しようとしましたが、どちらも機能しません。LaTeX に終了を指示するコマンド (\exit など) はありますか?
読んでくれてありがとう。
編集:
latexのバリアントの代わりにtexを実行すると、次のことが期待どおりに機能することに注意してください。
(その間、texコンソールで)
ただし、Leslie Lamport はA Document Preparation System LaTeX on page 233 で、\end が \end{document} に置き換えられたと述べていますが、次のいずれも LaTeX セッションを終了しません。
c - 正確には fifo ではない
私は頭をつぶしていますが、これに対する解決策が見つかりません。次のシナリオを検討してください。
ローカルネットワーク上の別のマシンへの非ブロッキング「キュー」に書き込みたいライターがあり、データを読み取り(ライターがない場合はブロッキングモード)、ジョブAを実行してから長い時間後に戻るリーダーがありますそして次のデータを取ります。
したがって、シナリオは次のようになります。
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
読者が読んで仕事をする
リーダーがビジー状態であると同時に:
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- 作家が書く
- など...
tcpデーモンをリーダーとしてこれを実行できると思っていましたが、それはフォークと同時に実行されることを意味し、リーダーはCPUを大量に消費するため、一度に1つずつ処理する必要があります。
TCPサーバーにリクエストを取得させてからFIFOに通知し、別のデーモンにFIFOから読み取らせることを考えましたが、同じ制限があります。
つまり、ライターが書き込むときに FIFO を読み取る必要があり、ライターはリーダーよりも何倍も高速に書き込む必要があります。
db ソリューションは問題ありませんが、a) あまり高速ではなく、b) リーダーのロックがありません..sleep(x) を使用して実装したくないため、適切なプログラミング手法ではないようです。
解決策はありますか?
sybase - Sybase bcp エラーを確実にキャッチするにはどうすればよいですか?
オンザフライで出力を圧縮できるように、Sybase bcp で名前付きパイプを使用しています。
Sybase bcp ユーティリティは、終了コードで多くの情報を返しません。Sybase のドキュメントでは、プロセスによって書き込まれたエラー メッセージを調べるようにユーザーに指示しています。
これは、私たちが使用するエラー処理イディオムの言い換えです。例を短くするために、スクリプトの非 bcp 部分の一部のエラー チェックが削除されています。
基本的に、「deadlock」という単語が bcp 出力メッセージに表示される場合、再試行します。
2 つの質問
- このアプローチは合理的に見えますか?
- デッドロック以外に心配する必要がある bcp エラーは何ですか?
特に一時的な bcp エラーの検出に関心があり、再試行できます。
複合ステートメントを使用して、圧縮前に bcp データの周りにヘッダーとフッターを挿入できるようにしていますが、例を簡略化するために省略しています。
testing - FIFO セマフォ テスト
FIFO セマフォを実装しましたが、適切に動作していることをテスト/証明する方法が必要です。簡単なテストは、セマフォで待機しようとするいくつかのスレッドを作成し、数字を含むメッセージを出力することです。数字が正しい場合は FIFO である必要がありますが、これはそれを証明するのに十分ではありません。たまたま発生。したがって、それをテストするより良い方法が必要です。
必要に応じて、ロックまたは条件変数も使用できます。
ありがとう
unix - 複数のリーダーを備えたUnixの名前付きパイプ(FIFO)
WriterとReaderの2つのプログラムがあります。
WriterからReaderへのFIFOがあるので、Writerでstdinに何かを書き込むと、Readerからstdoutに出力されます。
2つのリーダーを開いた状態でこれを実行しようとしましたが、2つのリーダープログラムのうちの1つだけからstdoutへの出力が得られました。Unixがstdoutを印刷するために選択するリーダープログラムは、これを実行するたびに任意のように見えましたが、プログラムの1つを選択すると、stdoutへの各出力は同じReaderプログラムから印刷されます。
なぜこれが起こるのか誰かが知っていますか?
私が2つのWRITERプログラムを持っている場合、それらは両方とも同じパイプに問題なく書き込みます。
stored-procedures - Informix:SQL/ストアドプロシージャを使用したFifo評価
IDS 10を使用しており、製品ID、トランザクション時間、ボリューム、数量、および価格による在庫の変化を含む単純なトランザクションテーブルがあります。
SQL /ストアドプロシージャだけでFIFO評価を決定することは可能ですか、それともカーソル処理にDBIでPerlのようなものを使用する必要がありますか?
私は最初に総量で一時テーブルを作成し、次にソートされたトランザクションを処理して関連するトランザクションの平均を計算する必要があるため、Fifo評価ではpovからカーソルを処理する必要があります。
ipc - 通常のユーザーが機密データを見るのを防ぐために、名前付きFIFOは安全ですか?
2つのプロセス間で転送する機密データがある場合は、名前付きFIFOを作成し、/tmp
使用後に削除できます。この方法が安全かどうか知りたいですか?FIFOを壊すのはどれくらい簡単ですか?
IPC(プロセス間通信)を実行する方法はいくつかあることは知っていますが、IMHO、パイプはハードディスクにバッファリングされたデータを残すことがあるため、理想的ではありません。共有メモリは安全ですが、常に実行可能であるとは限りません。