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

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

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

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

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

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

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

0 投票する
2 に答える
8475 参照

unicode - /Uスイッチを使用してもWindows cmdパイプがユニコードにならない

Console.WriteLine を使用してテキストを出力する小さな c# コンソール プログラムがあります。次に、この出力を次のようなテキスト ファイルにパイプします。

c:myprogram > textfile.txt

ただし、/u スイッチを使用して cmd を開始しても、ファイルは常に ansi テキスト ファイルです。cmd /? /u スイッチについて次のように述べています。

/U パイプまたはファイルへの内部コマンドの出力を Unicode にします

そして、私が行うとき、それは確かに違いを生みます

c:echo "foo" > text.txt

text.txt は unicode (BOM なし)

コンソール プログラムの出力を新しいファイルにパイプしても同様に Unicode ファイルが作成されないのはなぜですか。

Windows Power Shell (正しい BOM を含む Unicode ファイルを生成する) を使用しているだけですが、cmd でそれを行う方法を知りたいです。

ありがとう!

0 投票する
9 に答える
74387 参照

python - subprocess.Popen を使用して複数のプロセスをパイプで接続するにはどうすればよいですか?

subprocessPythonモジュールを使用して次のシェル コマンドを実行するにはどうすればよいですか?

入力データは文字列から取得されるため、実際には必要ありませんecho。私はここまで来ましたが、パイプを通過させる方法を誰か説明できsortますか?

更新:以下の受け入れられた回答は実際には質問に答えていませんが、S.Lottは正しいと信じており、そもそもその問題を解決する必要はありません!

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

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

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

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

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

c++ - stdin/stdout/stderr でのクロスプラットフォーム (linux/Win32) ノンブロッキング C++ IO

次の特性を持つ stdin/stdout を介したノンブロッキング IO の最適なソリューションを見つけようとしています。

  • 十分なデータがある限り、nサイズのチャンクで読み取ります。
  • 十分なデータがない場合は、部分的なチャンクで読み取ります。
  • 利用可能なデータがない場合は、データが得られるまでブロックします (たとえnよりも小さい場合でも)。

目標は、「制御」コードをすぐに処理しながら、大規模なデータセットを効率的に転送できるようにすることです (部分的に満たされたバッファーにコードを残すのではなく)。

スレッドと istream::get() ループを使用するか、プラットフォーム固有のコードをたくさん書くことでこれを達成できることを私は知っています (Windows ではファイル ハンドルで select() を実行できないため)... (( istream::readsome() も有望に思えますが、Googleで見つけた唯一の結果は、実際にはうまく機能しないと言っている人だけでした.))

私はこれらの API を使ったコーディングをあまり行っていないので、もっと良い方法があるかもしれません。

0 投票する
2 に答える
6921 参照

bash - パイプに追加するにはどうすればよいですか?

したがって、私の質問は、一時ファイル(私の場合はouputdata.txt)を作成せずに、プログラムにデータを送信してから、同じデータとその結果を別のプログラムに送信できるかどうかです。できればLinuxパイプ/bashを使用してください。

私は現在、次のことを行っています。

cat inputdata.txt | ./MyProg> outputdata.txt

cat inputdata.txt outputdata.txt | ./MyProg2

0 投票する
4 に答える
1356 参照

c++ - 単純な匿名パイプ - 使用するラッパー モデルは? (WinAPI、C++)

Windows で 2 つの実行中のプロセスがあり、各プロセスには他のプロセスへのパイプがあります。

複雑なクラスをシリアル化し、あるプロセスから別のプロセスに送信したいと考えています。シリアル化手順は既に完了しており、パイプがバイナリ ストリームを送信していることを理解しています。シリアル化されたデータを送信するにはどうすればよいですか? WinAPI と C++ を使用しています。

カスタムプロトコルを開発する必要がありますか? もしそうなら、それはこの特定のクラスにジェネリックまたはユニークであるべきですか? シリアル化されたクラスを送信するときに仮想テーブルを保持できますか?

この場合に一般的に使用されるモデルまたは設計パターンはありますか? 少しのサンプルコードをいただければ幸いです。ありがとうございました!

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

winapi - CreateFile("CONIN$" ..) は何をしますか?

plinkのソース コードをunisonと互換性を持たせるためにハッキングしていました。

unison はファイル同期ツールであり、「ssh」コマンドを実行してリモート サーバーに接続しますが、Windows 用の ssh.exe はありません。plink は非常に近いですが、十分に近いわけではありません (unison が期待するように動作しません)。そのため、人々は通常、このようなラッパーを作成します。

問題の 1 つは、unison がパスワード プロンプトが stderr に出力されることを期待していることです (ただし、plink はそれを stdout に出力し、unison を混乱させる原因となります)。プロンプトを標準出力に出力します。だから私は自分の道をハックしてそれをしました。

次の問題: プロンプトに応答できません!! 何を入力しても効果はありません。

入力を取得するためのコードは、おおよそ次のようになります。

なぜこのように行われるのかはわかりませんが、私は Windows 用のコマンド ライン ツールの設計の専門家ではないので、何を知っているのでしょう! しかし、入力ハンドルの設定に何かが欠けていると思います。

上記のラッパー ツールのソース コードを確認したところ、次のように表示されました。 hconin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0)

そして私はそれを試します(ただそれのために)

そして驚くべきことにそれは機能します!プロンプトに応答できるようになりました。

どうしてこれなの?「CONIN$」とは?となぜ違うのSTD_INPUT_HANDLEですか?

私はそれを「推測」することができ、これで役割FILE_SHARE_READOPEN_EXISTING果たしています(sshは別のプロセス内から実行されているため)が、ここで何が起こっているのかを理解し、このコードに不要な側面がないことを確認したい.エフェクトとかセキュリティホールとかそういう怖いもの!

0 投票する
2 に答える
3107 参照

c++ - 読み取り/書き込み boost::binary_oarchive をパイプに

単純な (匿名の) パイプを介してクラス オブジェクトを相互にスローする 2 つの単純なプロセスを構築し続けています (以前の投稿を参照)。今、私はboost::serializationを明らかにし(回答してくれた人に感謝します)、::WriteFile::ReadFileを介していくつかのクラスをシリアル化しようとしました。だから - 私が間違っているのは何ですか?


1)いくつかのクラスを作成しました

2)そして今、私はこのクラスからバイナリアーカイブに読み込み、その内容をパイプの一端に書き込もうとしています...

そんな風にはうまくいきませんよね?それで、それはどうなりますか?

3) 反対側も同じ操作?