問題タブ [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.

0 投票する
11 に答える
9277 参照

java - Windows での Java から C++ への効率的なデータ転送

Java から C++ アプリケーション (両方とも同じマシン上) に大量のデータ (最大 1 Gbit) をストリーミングしようとしています。現在 Linux で FIFO を使用していますが、Windows ソリューションも必要です。

最もクロスプラットフォームな方法はローカル ソケットのようですが、a) TCP チェックサムとカーネル空間との間のコピーから巨大なオーバーヘッドが発生しないでしょうか、b) 平均的なユーザーのファイアウォールは、および多分接続をブロックしますか?

JNI と名前付きパイプ API (\.\pipe\blah) を使用して、接続の両側でプラットフォーム固有の非常にひどい混乱を引き起こすことが、より安全な解決策のようです。

これらは本当に私の 2 つの最良のオプションですか (そして、どれをお勧めしますか?) ありがとう!

0 投票する
5 に答える
5367 参照

linux - Linux カーネル /proc FIFO/パイプ

現在、カーネル イベントに基づいてデータを生成し、それらをファイルにプッシュするカーネル モジュールを作成しようとしています。これは悪いことだと読んだ後 (私も同意見です)、必要に応じてユーザー プログラムがプルできる /proc ファイルにデータを保持する方が理にかなっていると判断しました。しかし、この考えはあらゆる種類の問題、特にこのファイルをいつ、どのようにクリアするかという問題を引き起こしました。だから私は考えました...「 /proc に名前付きパイプを作成して、そこから読み取らないのはなぜですか?」

proc ファイルの読み取り関数と書き込み関数を設定する一般的な要点はわかりましたが、これをどのように行うかについてはまだ概念的な問題があります。つまり、任意のデータを取得してカーネルからそのようなパイプに書き込む関数をどのように作成すればよいでしょうか? カーネル空間から名前付きパイプにデータをプッシュする方法を知っている人はいますか? 最終的に、/proc ファイルである必要はありません(特に、そうするのが間違っている場合) が、それが私が到達した結論でした。次に、ユーザー空間プログラムからそれにアタッチする方法を理解する必要がありますが、それは別の問題だと思います。

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

c++ - ifstream オブジェクトによる FIFO からの読み取りのブロック

としてFIFOファイルを開きますifstream。オブジェクトが作成されるとすぐに、FIFO に何かを送信するまでスレッドはブロックされます (これは私にとっては問題ありません)。getline()次に、ストリームからデータを取得するために呼び出します。

より多くのデータが FIFO ファイルに書き込まれるまで、スレッドを再度読み取りブロックするにはどうすればよいですか?

ありがとう

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

c - 名前付きパイプ (mkfifo) でノンブロッキング fopen を実行するにはどうすればよいですか?

mkfifo を使用して名前付きパイプを作成して開こうとするプログラムがある場合、パイプをブロックせずに読み取りまたは書き込み用に開くにはどうすればよいですか?

具体的には、GUI の有無にかかわらず実行できる C プログラムを作成しています (Java で作成)。

C プログラムでは、mkfifo を使用して名前付きパイプを正常に作成しましたが、

fopen は、GUI がそのパイプを書き込み用に開くまで戻りません。私がやりたいことは、(GUI がそれに書き込むことを決定した場合) そのパイプを一度読み取れるようにすることです。ファイル記述子を select() 呼び出しに入れます。Java GUI が実際に開始されることは決してないと予想するのは合理的であるため、特定の時点で、またはまったくパイプのもう一方の端を開くために Java GUI に依存することはできません。

また、書き込み用に 2 つ目のパイプを開きますが、同じ問題が発生すると思います。さらに、リーダーのない出力パイプに O_NONBLOCK を設定することはできません。

助言がありますか?

(これはLinuxシステムで実行されています)

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

ipc - 多くのプロセスがposixの名前付きパイプで単一のリーダーに書き込むことへの影響はありますか?

私はPOSIX(OSX)用のプログラムを書いています。ここでは、本質的にロギングスレッドである1つのリスナーにメッセージを送信する多くのプロセスがあります。すべてのプロセスは個別のプログラムで実行され、多くのプロセスが書き込む単一の名前付きパイプ (FIFO) を使用しますが、単一のプロセスのみが読み取りを行うのは非常に魅力的です。

質問:

1) これは機能しますか? - bash を使用して、複数のプロセスが書き込みを行う fifo をセットアップすることで、これを機能させることができるので、理論的にはこれが機能することがわかっています。しかし、実際には、私が見落としている問題はありますか?

シェル #1

シェル #2 と #3

2) 各ライターが比較的短いメッセージ (< 100 バイト?) のみを書き込む場合、 write() への各呼び出しが全体としてリーダーに送信されると想定できますか? それとも、あるメッセージの半分が、別のライターからの別のメッセージの半分で文字化けする危険がありますか?

アドバイスをありがとう。

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

python - 奇妙なスレッド化されたオープン fifo の問題をデバッグするには?

Web サービスは、USR1 シグナルを受信したときにそのデータの一部を公開するように構成されています。信号は、xinetd サーバーがリモート クライアント (nc myserver 50666 など) から要求を受信すると送信されます。Web サーバーが USR1 信号を受信すると、専用の fifo パイプを開き、そのデータをパイプに書き込み、パイプを閉じます。パイプ。その間、xinetd サーバーはパイプを読み取り、リモート クライアントにフィードします。

ほとんどの場合、それらは問題なく機能しますが、何らかの理由でクライアントが複製レコードを受け取ることがあります。ログから、パイプが適切に閉じられず、キャッシュが残っているように見えます。そのため、次にサービスを提供するときに、以前と現在の両方がクライアントに送信されます。問題は、再現しようとすると常に発生するわけではないことです。残念ながら、一度再現できませんでした。

以下は、プロセスを示す簡単なスニペットです。

ウェブサーバー: (webserver.py)

xinetd.d サーバー: (spitter.py)

では、重複の原因となったのは正確には何だったのでしょうか。それを引き起こす方法は?現在の修正では、パイプファイルのリンクを解除し、残り物を避けるために毎回再作成していますが、それが適切な解決策であるかどうかはわかりません.

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

c# - C#のwinformを使用したFIFO

スレッドのGUIの問題に悩まされています。スレッドにコールバックを使用させてコードを実行させる(そして失敗させる)代わりに、メインのフォーム/スレッドがデータを受信して​​処理を行うようにFIFOを作成するにはどうすればよいですか?

問題のGUIの問題-> SelectedNodeのスレッド例外=.Nodes[0]

0 投票する
5 に答える
1642 参照

data-structures - 固定サイズのFIFOキューの正しい用語は何ですか?

次のデータ構造の正しい名前は何ですか?それは:

  • 固定サイズのキュー
  • 新しい要素が先頭に追加されます
  • キューが特定のサイズを超えると、いくつかの要素が最後から削除されます
0 投票する
3 に答える
14539 参照

linux - Linuxの場合:FIFOへの書き込み

mkfifoコマンドを使用して新しいFIFOを作成しました。テキストファイルがありますf.txt。テキストファイルをFIFOに書き込みたい。どのように?そのためのUNIXコマンドはありますか?

0 投票する
5 に答える
8101 参照

linux - NFS 経由でマウントされた FIFO ファイルに書き込めません

NFS マウント上の FIFO ファイル ロケートに書き込もうとすると、ブロックされます。何が問題なのですか?

私の /etc/export:

NFS サーバーとクライアントの ls /tmp/test は同じです

そして、私はルートとして書いています

ありがとう。