問題タブ [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 投票する
2 に答える
1978 参照

windows - Windows 上の Perl でフォーク パイプを動作させるにはどうすればよいですか?

Unix から Windows に Perl スクリプトを移植しようとしていますが、 open 関数でサポートされていない fork パイプが原因で、ほとんど不可能な時間がかかっています。コードは次のとおりです。

エラーは次のとおりです。

これを機能させる方法を知っている人はいますか?ありがとう!

マイク

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

unix - Solaris のコマンドラインからノンブロッキング パイプを作成する方法は?

他のプロセスからの入力を読み取って分析する lua スクリプトを作成しようとしています。この目的のために私は io.popen を使用しており、Windows では期待どおりに動作しますが、Unix(Solaris) では io.popen ブロックから読み取るため、スクリプトはすぐに戻るのではなく、何かが来るまでそこで待機します...

私の知る限り、スクリプト内から io.popen の機能を変更することはできません。可能であれば、C コードを変更する必要はありません。スクリプトをパッチ適用済みのコードにバインドする必要があるためです。バイナリ。

コマンドラインの解決策はありますか?

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

linux - コマンドパイプは *NIX でどのように機能しますか?

私がこれを行うとき:

プロセスfindgrepは一緒に生成されていますか? 私の推測ではイエスです。もしそうなら、これはどのように機能しますか?:

yesが継続的に「y」を標準出力に送信し、標準入力をcommand_that_prompts_for_confirmations読み取るたびに「y」を読み取る場合、いつ終了するかをどうやって知るのでしょyesうか? yes出力を他のコマンドにパイプせずに単独で実行すると、決して終了しないためです。

しかし、パイプ コマンドですべてのプロセスが同時に生成されない場合、yes出力する 'y' の数をどうやって知るのでしょうか? ここは私にとってキャッチ22です。このパイピングが *NIX でどのように機能するか説明してもらえますか?

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

c - 親子IPCにCでパイプを使用するとプログラムがブロックされる

ソケット接続を受け入れるときに fork() が子プロセスからオフになるサーバーを作成しています。

子がクライアントと通信するとき、その情報の一部を親に送り返す必要があります。これを実現するためにパイプを使用しています。

問題は、親子 IPC を実行しようとすると、子からの入力を読み取るときに親がブロックすることです。つまり、子が同時に実行されていても、それらはすべて親を待っているため、一度に 1 つずつしか処理できません。

私のコードは次のようになります(簡潔にするためにエラーチェックは削除されています):

だから私の質問は、どうすればこれを解決できますか? ブロックされないように、親がパイプを使用して子と通信するにはどうすればよいですか?

これはパイプでも可能ですか、それとも代わりに共有メモリ(セマフォを使用すると思います)またはメッセージキューを使用する必要がありますか? (この投稿を読みました: Unix/Linux IPC の比較ですが、これらのタスクが実際にどのように達成されるかの例を見つけるのは非常に困難です。)

詳細:

次のことを行うテスト プログラムがあります。 1. サーバーに接続する 2. スリープ(5) 3. サーバーから切断する

このプログラムの 2 つのインスタンスを実行すると、サーバーは次のように出力します。

明らかに、各クライアントを一度に 1 つずつ処理します。

IPC を削除すると、親と子の両方からパイプ read() と write() を削除すると、次のようになります。

これは私が欲しいものです!

これを達成する方法について何か考えはありますか?(または、この問題を解決しようとしている方法を変更する必要がありますか?)

(編集: これはネットワーク クラスの課題の一部です。集中型サーバーを使用してピアを管理する P2P プロトコルを実装しています。任意の言語を使用できますが、C で試してみようと思いました。)

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

unix - sedはブロックされていますか?

私が言うとき、私はsedがブロックしていないという印象を持っていました:

sed到着時にデータを処理しますが、

次にsedブロックしnetcatます。

私は正しいですか?

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

c# - C#アプリにファイル名を渡す代わりに、テキスト/データをzip / gpgにストリーミングしますか?

私は現在、ファイルを取得してgpg.exeを使用して暗号化できるC#で記述されたアプリを持っています

私がやろうとしているのは、1。ファイルの作成(通常はデータベースクエリから)2。ファイルの暗号化3.暗号化されていないファイルの削除

したい

  1. 情報をメモリに収集します(辞書やリストなどに)
  2. テキスト/データをgpg.exeにストリーミングして、暗号化されたファイルを出力します

パイプストリームを調べたり、標準入力をgpgプロセスにリダイレクトしたりしましたが、gpg.exeをだまして、ハードドライブ上のファイルではなくストリーミングされたテキスト/データを受け入れる方法を見つけられませんでした。

最初はgpgでできるかと思っていましたが、Zipでもできるのですが、それも可能かと思います。phpに関連しているように見えるpopenへの参照がいくつか見つかりましたが、c#には何もありません。

基本的に、ハードドライブ上の実際のファイルではなく、アプリにストリーミングされるメモリ内のtext.txtを使用して、以下をプログラムで実行することを検討しています。

C:\ Program Files \ GNU \ GnuPG>タイプC:\ test.txt | zip> plubber.zip C:\ Program Files \ GNU \ GnuPG> type C:\ test.txt | gpg -er "mycomp_operations"> Test.pgp

あなたが与えることができるかもしれないどんな助けにも感謝します:)

トニー!

0 投票する
6 に答える
2731 参照

python - 現在のディレクトリ内のすべてのファイルを印刷するPythonワンライナー

次のワンライナーでPythonを介してすべてのファイルを印刷するにはどうすればよいですか?

具体的には、python-cにパイプする方法を知りたいです。DOSまたはCygwinの応答が受け入れられました。

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

shell - コマンドの出力を Bourne シェルのファイル記述子にキャプチャするにはどうすればよいですか?

Bourne シェルでコマンド出力をキャプチャする標準的な方法は、次の$()構文を使用することです。

ただし、大量の出力があるコマンドの場合、これには、シェルが全体に 1 つの長い文字列としてメモリを割り当てる必要があります。popen私ができる新しいファイル記述子を取得するために、Unix C function と道徳的に同等のことをするものを見つけたいと思いますread:

これは可能ですか?

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

winapi - Win32: stdout ハンドルが char ストリームか wchar ストリームかを判断する

シェルを介して任意のプログラムを呼び出し、その出力をログに記録する必要がある製品用の win32 ユーティリティ関数を作成しています。これを行うには、stdout を子プロセスからパイプにリダイレクトします。

このように呼び出される可能性のあるプログラムは多種多様であり、その多くは私たちの管理下にはありません。現在、多くのプログラムからの出力が最初の文字の後に切り捨てられているように見えるという問題が見られます。これは通常、WCHAR 文字列が誤って CHAR として使用されていることを示しています。

子プロセスがその stdout パイプに CHAR または WCHAR として書き込んでいるかどうかを確認するにはどうすればよいですか?

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

c - fprintf を使用してパイプに書き込むにはどうすればよいですか?

パイプを作成し、dup2() を使用してストリーム 1 と 2 (stdout と stderr) をそれらのパイプに上書きしました。

fprintf を使用してストリーム 1 または 2 に書き込みたいのですが、プログラムがパイプの反対側で何も受信していないようです。printf() を使用してみましたが、これがデフォルトで標準出力またはストリーム 1 に書き込まれるかどうかはわかりません。ストリーム 1 に書き込む場合は、コードの深いところに問題があると思います。

基本的に、ストリームを表す int を指定して、fprintf() での使用に適した FILE* を取得するにはどうすればよいですか?