問題タブ [pipe]
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でブロックせずに名前付きパイプから読み取るパイプラインを設定する
パイプの反対側が接続を受信するのを待って open() 呼び出しがハングしないように、特定のパイプに対して開かれたファイル記述子を使用してサブプロセスを呼び出したいと考えています。
デモンストレーションするには:
この場合、some_program
何らかのプロセスが/tmp/foobar.pipe
書き込み用に開かれるまで実行されません。ただし、some_program
コマンドを受信していない場合でも有用な効果があるため、目的の動作をsome_program
すぐに実行する必要があります。
/tmp/foobar.pipe
代替スクリプト言語 (python、perl など) またはフラグで開く C ラッパーを介して実行することでこれを行うメカニズムO_NONBLOCK
は明らかです。可能であれば、純粋なbashソリューションを探しています。
c++ - LAN コンピュータ間でパイプを使用できますか?
LAN コンピュータ間でパイプを使用できますか?
特に Windows を探していますが、他のプラットフォームに関する情報があれば、後でこのスレッドを見つけた他の人にも役立ちます。
c++ - Windows/unix/linux でパイプを使用するのはなぜ危険だと考えられているのですか?
パイプを使用するのはなぜ危険だと考えられているのですか? これらのセキュリティの問題を回避するにはどうすればよいでしょうか?
主に Windows に興味がありますが、他の OS 情報があれば提供してください。
language-agnostic - Windows と Linux のパイプの違いは何ですか?
Windows と Linux のパイプの違いは何ですか?
c# - C#コンソールはパイプで入力を受け取ります
私は、パラメータを使用してコンソールアプリケーションをプログラムする方法を知っています。例:myProgram.exeparam1param2。
私の質問は、どうすればプログラムを|で動作させることができるかということです。例:echo "word" | myProgram.exe?
c - パイプでコマンド出力を取得、Linux の場合は C
Linux CLI コマンドを実行し、C から stdout 出力を取得する必要があります。
pipe() を使用してパイプを作成し、次に fork/exec を使用して、exec() を呼び出す前に子の stdout 記述子をパイプにリダイレクトし、親のパイプから読み取ることができます。さらに、私は子供を待つ必要があります。
system() が fork + exec + 待機を行うように、fork + リダイレクト + exec + 待機を行うための単純な呼び出しはありますか? system() のみがリダイレクトを行いません。
fork + redirect + exec を行う popen() がありますが、待機は行わないため、終了ステータスを取得できません。
c - **ポータブル C** で、コマンドの stdin をランチャーの stdout に接続するコマンドを起動する方法は?
C プログラム (p1) で、p1 の標準出力から標準入力を読み取る、動的に構築されたコマンド (およびその引数) を起動する方法は?
ご了承ください:
この stdout --> stdin パイピング以外の方法も、Windowsと Linux 間で移植可能であればOK です。
ここでは C++、Java、Perl、Ruby、Python などは使用できません。
また、これには Windows ビルドの MinGW 依存関係がありますか?
REOPENED : 以下の質問は Linux の場合の回答ですが、この質問は移植可能な方法が必要です。 C プログラム内からプログラムを実行する
c# - セキュリティの観点から、Windows でパイプを使用するのは危険だと考えられていますか?
セキュリティの観点から、Windows でパイプを使用するのは危険だと考えられていますか?
c++ - クロスプラットフォーム双方向IPC
比較的簡単だと思っていたプロジェクトがありますが、思っていたよりも苦痛になりつつあります。まず、私が操作しているコードのほとんどは、制御できないレガシーコードであるため、大きなパラダイム変更を行うことはできません。
これが私がする必要があることの簡単な説明です:stdinから読み取り、stdoutに書き込む単純なプログラムがたくさんあるとしましょう。(これらは私が触れることはできません)。基本的に、stdinへの入力は「温度を100に設定」などのコマンドです。そして、出力は「温度が100に設定されました」または「温度が設定値を下回りました」というイベントです。
私がやりたいのは、これらの単純なプログラムの束を開始し、イベントを監視し、必要に応じてそれらにコマンドを送信できるアプリケーションを作成することです。私の最初の計画はpopenのようなものでしたが、読み取りパイプと書き込みパイプの両方を取得するには、双方向のpopenが必要です。popen2と呼ばれるものを一緒にハッキングし、実行するコマンドと、読み取りおよび書き込みストリームでいっぱいになる2つのFILE*を渡します。次に、各プロセスの各stdoutから読み取り、必要なロジックを実行してから、コマンドを適切なプロセスに書き戻す単純なループを作成するだけです。
これがいくつかの擬似コードです
実際のプログラムはより複雑で、ストリームを覗いて何かが待機しているかどうかを確認します。待機していない場合は、そのプロセスをスキップします。同様に、特定のプロセスにコマンドを送信する必要がない場合も同様です。しかし、このコードは基本的な考え方を示しています。
これで、これは私のUNIXボックスでうまく機能し、cygwinを搭載したWindowsXPボックスでもかなりうまく機能します。ただし、Win32でネイティブに動作させる必要があります。
難しいのは、私のpopen2がfork()とexecl()を使用してプロセスを開始し、子プロセスのstdinとstdoutにストリームを割り当てることです。Windowsでこれを行うことができるクリーンな方法はありますか?基本的には、UNIXバージョンと同じようにWindowsで動作するpopen2を作成したいと思います。このようにして、Windows固有のコードのみがその関数に含まれ、他のすべてが同じように機能するようになります。
何か案は?
ありがとう!
windows - Windowsで開いているすべての名前付きパイプのリストを取得するにはどうすればよいですか?
名前付きパイプが正しく機能しているかどうかをテストする簡単な方法はありますか?アプリから送信しているデータが実際に送信されていることを確認したいと思います。名前付きパイプすべてのリストを取得するための迅速で簡単な方法はありますか?