問題タブ [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.
linux - バッシュパイプ処理
bashがパイプを介してデータを送信する方法を知っている人はいますか?
このコマンドは、file.txt のすべての内容をバッファーに出力し、それを末尾で読み取りますか? それとも、このコマンドは、たとえば、file.txt の内容を 1 行ずつ出力し、各行で処理を停止して末尾を処理し、さらにデータを要求しますか?
私が尋ねる理由は、基本的にデータのチャンクに対して一連の操作を実行する組み込みデバイスでプログラムを作成しているためです。1 つの操作の出力は次の操作の入力として送信されます。Linux(bash)がこれをどのように処理するかを知りたいので、「cat file.txt | tail -20」を実行するとどうなるかではなく、一般的な回答をお願いします。
編集: Shog9 は、関連するウィキペディアの記事を指摘しました。これは記事に直接つながることはありませんでしたが、これを見つけるのに役立ちました: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation探していた情報。
はっきり言ってなくてすみません。もちろん、パイプを使用しています。もちろん、コマンドのそれぞれの部分の stdin と stdout を使用しています。私は、それは明白すぎて明言できないと思っていました。
私が求めているのは、これがどのように処理/実装されるかです。両方のプログラムを同時に実行することはできないため、データは標準入力から標準出力にどのように送信されますか? 最初のプログラムが 2 番目のプログラムよりもはるかに高速にデータを生成するとどうなりますか? システムは、最初のコマンドが終了するか、stdout バッファーがいっぱいになるまで最初のコマンドを実行し、次のプログラムに移動するか、処理するデータがなくなるか、より複雑なメカニズムが存在するかをループします。 ?
java - Java 6 で継承された stdin/stdout/stderr を使用してプロセスを開始する
Java のProcessBuilderクラスを介してプロセスを開始すると、そのプロセスの標準入力、標準出力、および標準エラー ストリームに JavaInputStreams
およびOutputStreams
. System.in
ただし、これらのストリームを、System.out
、およびにシームレスに接続する方法が見つかりませんSystem.err
。
redirectErrorStream()
サブプロセスの標準出力と標準エラーを含む単一のデータを取得し、InputStream
それをループして標準出力を介して送信することは可能ですが、それを行う方法が見つからず、ユーザーがプロセスに入力できるようにする方法が見つかりません。、私が Csystem()
コールを使用した場合と同様に、彼または彼女は可能でした。
これは、Java SE 7 がリリースされた時点で可能のようです。現在、回避策があるかどうか疑問に思っています。isatty()
子プロセスの結果がリダイレクトを通過する場合のボーナス ポイント。
winapi - 匿名パイプでの I/O の重複
匿名パイプで重複した I/O を使用することは可能ですか? CreatePipe() には FILE_FLAG_OVERLAPPED を指定する方法がないため、OVERLAPPED 構造体を指定したとしても、ReadFile() はブロックされると想定しています。
windows - Unix (または Windows) で (できれば無名の) パイプを使用して、1 つのプロセスの stdout を複数のプロセスに送信するにはどうすればよいですか?
プロセス proc1 の stdout を 2 つのプロセス proc2 と proc3 にリダイレクトしたいと思います。
私は試した
しかし、うまくいかないようです。
書く
の代わりに stdout に
linux - パイプ入力をファイルにダンプする簡単な方法は何ですか?(Linux)
電子メールのデバッグ目的で、パイプされたものをすべて取得してファイルにダンプする小さなシェルスクリプトを探しています。何か案は?
bash - Bash変数スコープ
echo
最後のステートメントが空白である理由を説明してください。XCODE
これは、whileループで1の値にインクリメントされると思います。
++XCODE
メソッドの代わりに次のステートメントを使用してみました
また、whileステートメントの外には出力されません。ここで変数スコープについて何かが欠けていると思いますが、古いマニュアルページにはそれが表示されていません。
java - CharBufferの「配管」がハングするのはなぜですか?
次のメソッドがハングするのはなぜですか?
java - 「パイピング」の Java イディオム
Java で入力を出力に「パイプ」するための、次よりも簡潔で標準的なイディオム (JDK メソッドなど) はありますか?
Reader
[編集]とWriter
が与えられていることに注意してください。正解は、パイプを取得in
して形成する方法を示します (できれば、1 つまたは 2 つのメソッド呼び出しで)。とがとであるout
場合の回答を受け入れます(できれば/から / への変換を伴う)。orが/または/のサブクラスである場合の回答は受け付けません。in
out
InputStream
OutputStream
Reader
Writer
in
out
Reader
InputStream
Writer
OutputStrem
unix - shell/bashの2つのコマンド間のinput_and_outputの接続
stdin / stdoutから読み取りと書き込みを行う2つの(UNIX)プログラムAとBがあります。
私の最初の問題は、AのstdoutをBのstdinに接続し、BのstdoutをAIeのstdinに接続する方法です。Bしかし双方向パイプ。execを使用してリダイレクトすることでこれを解決できると思いますが、機能させることができませんでした。プログラムはインタラクティブであるため、一時ファイルは機能しません。
2番目の問題は、各方向を複製し、ロギングプログラムを介して複製をstdoutにパイプして、プログラム間を通過する(テキスト行ベースの)トラフィックを確認できるようにすることです。ここで、最初の問題を解決できれば、tee>(...)で逃げることができます。
これらの問題はどちらもよく知られている解決策があるはずですが、私は何も見つけることができませんでした。
私はPOSIXシェルソリューション、または少なくともcygwinのbashで機能するものを好みます。
あなたの答えのおかげで、私は次の解決策を思いつきました。A / Bコマンドは、ncを使用して2つのポートをリッスンします。ロギングプログラムはsedを使用します(バッファなしの処理には-uを使用)。
これは、ポート47001および47002への接続をリッスンし、すべてのトラフィックを標準出力にエコーします。
シェル2では次のことを行います。
シェル3では次のことを行います。
これで、シェル2に入力された行はシェル3に書き込まれ、その逆も同様で、トラフィックはシェル1に記録されます。
上記はCygwinでテストされています
更新:上記のスクリプトは数日後に動作を停止しました(!)。どうやらそれはデッドロックする可能性があります。回答の提案のいくつかは、より信頼できるかもしれません。
sql-server - 名前付きパイプとは
それらは何で、どのように機能しますか?
コンテキストはたまたま SQL Server です