問題タブ [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.
python - Python プログラムから FIFO に書き込む
Python プログラムから mplayer の音量を制御しようとしています。mplayer プログラムは、bash スクリプトから開始されます。
次に、再生中の mplayer のインスタンスの音量を制御できるようにするための Python で記述された GUI があります。私は次のことを試しました:
$musicvol を代わりに数値に置き換えれば機能しますが、残念ながらそれは役に立ちません。変数を渡すことができる必要があります。
Python アプリケーションから bash スクリプトを呼び出して解決することもできますが、それを機能させることもできません。
linux - ファイル記述子の準備の制御
単純化された形式で実際のハンドラーに渡される前に、何らかの処理が必要な複雑なメッセージの着信ストリームがある場合があります。
FIFO ファイル記述子を使用したいと思います。一方のスレッドが一方の端からそれを満たし、もう一方のスレッドがもう一方の端から読み取っています。今、私が望んでいる種類の動作: 読み取りスレッドは で待機しておりselect()
、ウェイクアップ時に への呼び出しで読み取ることができる完全なパッケージがあることを保証しread()
たい、つまり、再アセンブルする必要がないようにしたいバッファー サイズによる断片化のためのパッケージ (パッケージは、カーネルからユーザー空間へのバッファー通過制限を下回ることが保証されています)。
ファイル記述子の準備ができたとき、つまり、プロデューサーが完全なパッケージを正常に書き込んだときを手動で定義できるように、FIFO を構成する方法があるかどうかを知りたいです。読み取りの準備ができている読み取り終了 (ファイル記述子を介して)。これを実現する方法ioctl()
はありますか、または (Linux の世界で) この動作を提供する FIFO 以外に何らかの抽象化がありますか? (変数と条件変数については知っていpthread
ますが、プロデューサーとコンシューマーの間の結合を共有ファイル記述子に制限したいと思います。)
linux - シェルコマンドを使用して、デーモン化された非デーモンにデータを送り込む
これが私がやりたいことです:
$ serverise normally-barely-interactive-program-that-uses stdin stdout &
unique-id-221B
$ clienty 221B "Astonishing!"
Elementary
$ clienty 221B "what did I just say?"
'Astonishing', although the methods are simple and easily followed, once explained.
$ clienty 221B "so, you persist between invokations of the client?"
Indeed.
私は二重の名前付きパイプを試しましたが、最後の呼び出しは1つだけです。これは、サーバー側がEOFを取得しているため、stdinがユーザーによって閉じられていると想定しているためだと思います。
ソケットが進むべき道のようですが、ほとんどのラッパーはhttpに似たモデルを想定しており、誰かが接続するたびに新しいプログラムをフォークします。Socatは大丈夫のようですが、たった1回で死んでしまいます。
これにGnuScreenとTmuxが使用されているのを見たことがありますが、これはやり過ぎのようです。正直なところ、ユーザーの環境にどちらも含まれていないとは思えないため、このようなソリューションは顔が少し壊れやすいでしょう。それらの非標準構成の。また、少しやり過ぎのようです。
これは以前に発生したであろう問題のように思われるので、私はこれを行うおしゃれな小さなユーティリティを間違った場所で探しているに違いありません。
perl - Perl IPC - FIFO とデーモンと CPU 使用率
ユーザーにメールが届くたびに呼び出されるメールパーサーperlスクリプトがあります(.qmailを使用)。メールからカレンダーの添付ファイルを抽出し、Directory::Queue モジュールを使用して実装された FIFO キューにファイルの「パス」を配置します。
カレンダーの添付ファイルのパスを読み取り、ローカル システムとリモート CalDAV サーバーで特定のファイル操作を実行する別の perl スクリプトは、こちらで説明されているように、デーモンとして実行されています。したがって、基本的にこのスクリプトは次のようになります。
スクリプトをデーモンとして実行するために Proc::Daemon を使用しています。問題は、このプロセスの CPU 使用率がほぼ 100% であることです。より標準的で安全な方法でデーモンを実装するための提案された方法は何ですか? Proc::Daemon の使用について言及されているリンクに記載されているコードとほぼ同じコードを使用しています。
c - Linuxで2つの名前付きパイプ(FIFO)によって循環的にリンクされた2つのフィルター
Linuxで2つの名前付きパイプを介して2つのプロセスを相互に通信させたいと思います。各プロセスはUnixフィルターです。標準入力でデータを読み取り、標準出力でデータを書き込みます。これらは、最初の出力が2番目の入力であり、その逆であるという点で循環的にリンクされています。
これが最初のフィルター(ac)のコードです:
2番目のフィルター(bc)のコードは次のとおりです。
コンパイル(gcc -o A a.c && gcc -o B b.c
)、2つのFIFO()を作成mkfifo b2a ; mkfifo a2b
し、ターミナルで最初のプログラムを実行し(cat a2b | ./B > b2a
)、新しいターミナルを開き、2番目のプログラムを実行します(cat b2a | ./A > a2b
)。
私が期待したのは、AとBが順番に数を増やす無限ループでしたが、私が得たのはBがスタックし、Aが書いたものを読み取ることができないことです。
私がBを立ち上げた期間では、次のようになります。
Aを起動したターミナルでは、次のようになります。
lsofを使用する場合:
期待したものが得られないのはなぜですか?
前もって感謝します。
java - Javaで固定サイズのノンブロッキングキューを実装する最も効率的な方法は何ですか?
固定サイズ、ノンブロッキング、自動破棄 FIFO キューを表す Java クラスを見つけようとしています (または書き込もうとしています)。(たとえば、キューの容量が 100 の場合、項目 101 を配置すると項目 1 が削除され、項目 101 が正常に追加されます。)この質問に対する答えは役に立ちますが、追加の制約があります。 100-1000。
AutoDiscardingDeque<Float>
私のキューのアイテムはフロートのみなので、リンクされた質問で説明されているようなものを使用する方が一般的に効率的ですfloat[]
かSystem.arraycopy()
?
あるいは、私が思いもよらなかったより良い解決策はありますか?
python - PythonとFIFO
LinuxでPythonを使用してFIFOを理解しようとしましたが、理解できない奇妙な動作を見つけました。
以下はfifoserver.py
そしてこれはfifoclient.py
mkfifo input
また、とを使用して2つのFIFOを作成しましmkfifo output
た。
私が理解していないのは、いくつかのリクエストの後に2つのコンソールからサーバー(with python fifoserver.py input output
)とクライアント(with )を実行すると、クライアントpython fifoclient.py
が「壊れたパイプ」エラーでクラッシュする理由f.flush()
です。クラッシュする前に、数百から数千の正しく処理されたリクエストが正常に実行されていることを確認したことに注意してください。
私のコードの問題は何ですか?
c++ - ライブラリまたは Sutter のロックフリー キュー用の C++0x アトミックの同等の実装をブーストしますか?
ロックフリーおよび同時キューに関する Herb Sutter の記事は、ここ SO でかなり言及されています。ただし、私は C++0x コンパイラを持っていません...だから、誰かが自分のコードを変換して、ブースト ライブラリなどを使用して「アトミック」操作を提供したかどうか疑問に思っています。
誰かがミューテックス/条件変数の例を提供できたとしても、私は気にしません...
参考にした記事はこちら…
http://drdobbs.com/cpp/210604448
http://drdobbs.com/cpp/211601363
http://drdobbs.com/high-performance-computing/212201163
ありがとう!
c++ - stdin/std::cin がシークをサポートしているかどうかを確認します
編集:コードに愚かなバグがあり、これを修正したので、今では説明できます。それに応じて投稿を更新しました。
次のコードは、ライン バッファー内でのシークが機能することを示しています。
まず、何かをプログラムにパイプしたときの結果。
次に、「a[enter]s[enter]d[enter]f[enter]」と入力しました。
getc
3 番目に、 /get()
呼び出しごとに「asdf」と入力しました。
シークは、ライン バッファー内で機能しているように見えます。
これがコードです。
c# - キューイングに関する C# のアドバイス
割り当てられたプロジェクトについてアドバイスを求めており、それが「専門的に」どのように行われたか、または正しい方向に導くことができる提案を探しています.
クライアントからのコマンドを受け取り、バイト ストリームをシリアル ポートにプッシュするサーバー ピースがあります。複数のクライアントがこのサーバー ピースにコマンドを送信できますが、ハードウェアは一度に 1 つのコマンドしか処理できません。私の問題は、ソフトウェア側でのキューイングにあります。
Queue<T>
要求しているクライアント番号、メッセージ データ (シリアル ポートに書き込むバイト配列)、およびメッセージ タイプ (コマンドの説明) を含む DataSet にデータを挿入するヘルパー クラスも実装しました。また、DataGrid (フォーム上) にキュー コマンドを一覧表示します。おそらくその方法ではありませんが、要求しているクライアントとデータを保持し、視覚的にキューを表示する限り、それが私が考えることができる唯一のことです。
キューの処理はどこで行うのですか? DataGrid リストが変更された (アイテムが追加/削除された) 場合に、DataSet の最初の行のデータを取得してシリアル ポートに送信するカスタム イベントで処理することを考えました。
コメントや提案は大歓迎です。
ありがとう。
編集:現在実行されているコマンドをキューから削除するには、SerialPort からの応答も必要であることを追加するのを忘れていました。