問題タブ [named-pipes]
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.
macos - 名前付きパイプ (FIFO) で poll() を使用すると、OS X にバグがあるように見えます... 専門家は確認できますか?
しばらくの間、名前付きパイプのセットからポーリングしようとしていますが、名前付きパイプ ファイル記述子で POLLNVAL の即時応答を取得し続けています。OS X の壊れたポーリングに関するこのブログ投稿を見つけた後、これは OS X のバグ バグであると確信しています。
私はすでにコードをUDPソケットを使用するように切り替えることを計画していますが、これについてa)本当に壊れていることを確認するため、およびb)文書化の目的でSOに検証を依頼したかったのです。
これは私が書いたコードの簡略化されたバージョンです(ただし、私がテストした上記のリンクのコードは、それをかなりうまく綴っています):
これは以下を出力します:
吐き気。
他の誰かがこれに遭遇しますか?これは本当のバグですよね?
c++ - ReadFile() ブロッキングの中断 - 名前付きパイプ (Windows API)
簡単にするために、これは NamedPipe SERVER が NamedPipe CLIENT がパイプに書き込むのを待っている状況です (WriteFile() を使用)。
ブロックしている Windows API は ReadFile() です。
サーバーは、ブロッキングを有効にして同期パイプ (オーバーラップ I/O なし) を作成しました
クライアントが接続され、サーバーがデータを待機しています。
通常の流れでは、クライアントが何らかのデータを送信し、サーバーがそれを処理してから ReadFile() に戻り、次のデータのチャンクを待ちます。
その間、イベントが発生し (ユーザー入力など)、NamedPipe SERVER は他のコードを実行する必要がありますが、ReadFile() がブロックされている間は実行できません。
この時点で、NamedPipe Client は私のアプリケーションではないので、私はそれを制御できないことに言及する必要があります。サーバーのブロックを解除するために数バイトを送信することはできません。ただそこに座ってデータを送信しません。私はクライアントの実装を制御できないため、その側で何も変更することはできません。
1 つの解決策は、すべての ReadFile() 操作が実行される別のスレッドを作成することです。そうすれば、イベントが発生したときにコードを処理できます。これに関する問題は、イベントにも別のスレッドが必要であるため、このサーバーのインスタンスごとに 2 つのスレッドを追加することです。これはスケーラブルである必要があるため、望ましくありません。
呼び出してみた別のスレッドから
と
どちらも戻りません (クライアントがパイプに書き込むまで)。
次の理由により、同じパイプに接続して数バイトを書き込むことができません。
「名前付きパイプのすべてのインスタンスは同じパイプ名を共有しますが、各インスタンスには独自のバッファーとハンドルがあり、クライアント/サーバー通信用の個別のコンジットを提供します。」
http://msdn.microsoft.com/en-us/library/aa365590.aspx
私はそれを偽造する方法が必要です.64,000ドルの質問は次のとおりです。
ReadFile() のブロックを解除するにはどうすればよいですか?
c - ファイル名を期待してC APIにデータをフィードする
Linux で単純な C プログラムを作成しており、ファイルからのデータを期待する既存のライブラリの API を使用したいと考えています。const char* としてファイル名を入力する必要があります。しかし、ファイルのコンテンツと同じように、ヒープに割り当てられたバッファーに既にデータがあります。十分な RAM があり、高性能が必要です。一時ファイルをディスクに書き込むのを避けたいのですが、ファイルのように見える方法でこの API にデータを供給する良い方法は何ですか?
これが私のコードの安価なふりバージョンです:
marvelouslibrary.h:
ライブラリが最初に設計された normal-persons-usage.cpp:
myprogram.cpp:
明確にするために言うと、marvelouslibrary はポインターによってデータを受け入れる API 関数を提供していません。ファイルの読み取りのみが可能です。
パイプと mkfifo() を考えましたが、プロセス間の通信を目的としているようです。私はこれらのことについて専門家ではありません。名前付きパイプは、同じプロセスで読み取りと書き込みを行っても問題ありませんか? これは賢明なアプローチですか?
または、賢いことをスキップして、シャッドアップして一時ファイルを書き込むという計画「B」に進みます。しかし、新しいことを学び、この状況で何ができるかを知りたいと思っています。
c# - NamedPipeServer#WaitForConnection でブロックされたスレッドをシャットダウンする良い方法は何ですか?
それぞれが NamedPipeServer (名前付きパイプ IPC 用に .net 3.5 で追加されたマネージド型) を作成し、クライアントの接続 (ブロック) を待機する多数のスレッドを生成するアプリケーションを開始します。コードは意図したとおりに機能します。
ここで、このプロセスを完全に停止するための Shutdown メソッドも必要です。通常の bool フラグ isShutdownRequested トリックを試しました。ただし、パイプストリームは WaitForConnection() 呼び出しでブロックされたままになり、スレッドは終了しません。
Join は決して戻りません。
私が試したことはありませんが、機能する可能性があるオプションは、Thread.Abort を呼び出して例外を処理することです。しかし、それは正しくありません..何か提案があれば
更新 2009-12-22
以前に投稿できなくて申し訳ありません.. これは、キム ハミルトン (BCL チーム) からの返信として受け取ったものです。
割り込み可能な WaitForConnection を行う「正しい」方法は、BeginWaitForConnection を呼び出し、コールバックで新しい接続を処理し、パイプ ストリームを閉じて接続の待機を停止することです。パイプが閉じている場合、EndWaitForConnection は ObjectDisposedException をスローし、コールバック スレッドがこれをキャッチして未解決の端をクリーンアップし、クリーンに終了します。
これはよくある質問であることを認識しているため、私のチームの誰かが近日中にブログを書く予定です。
java - Java から Windows 名前付きパイプを開く方法は?
Linux システムでは、プロセス間通信 (プロデューサーとコンシューマー) に名前付きパイプを使用します。
コンシューマー (Java) コードをテストするために、コンシューマーに接続された名前付きパイプに書き込むダミーのプロデューサーを (Java で) 実装したいと思います。
これで、テストは Windows 開発環境でも機能するはずです。したがって、Java から Windows で名前付きパイプを作成する方法を知りたいと思います。Linux では mkfifo ( using と呼ばれますRuntime.exec()
) を使用できますが、Windows ではどのようにすればよいですか?
winapi - パイプで WriteFile を使用して文字化けしたテキストを修正するには?
私が作成している Win32 アプリケーションがあり、名前付きパイプを介してあるプロセスから別のプロセスに文字列を送信します。ただし、パイプで ReadFile を呼び出すプロセスは、文字化けしたデータを含む文字列を取得します。正しく書き込まれたバイト数を返しますが、文字列の最後の 8 文字程度が文字化けしています。
パイプを作成して書き込むコードは次のとおりです。
そして、これを読み取るコードは次のとおりです。
MessageBox が表示されると、文字列の末尾が文字化けしてしまい、その理由がわかりません。何か案は?
ありがとう!
unix - 名前付きパイプの問題をどのように解決しますか?
提供されたファイルの内容を取得して処理し、結果をstdoutを介して画面に出力するバイナリプログラム*があります。自動化スクリプトの場合、名前付きパイプを使用してこのプログラムにデータを送信し、出力を自分で処理したいと思います。スクリプトを機能させようとした後、名前付きパイプからデータを受け入れるバイナリプログラムに問題があることに気付きました。この問題を説明するために、unixシェルを使用したいくつかのテストの概要を説明しました。
実際のデータファイルを処理することで、プログラムが機能していることを簡単に示すことができます。
これにより、file.txtからの処理済み情報を含むoutput.txtが作成されます。
名前付きパイプ(pipe.txt)は、このデモンストレーションで見られるように機能します。
これにより、パイプを介して送信された後、file.txtからのデータを含むoutput.txtが作成されます。
バイナリプログラムがファイルではなく名前付きパイプから読み取っている場合、物事は正しく機能しません。
この場合、catとbinprogが終了した後でも、output.txtにはデータが含まれていません。topとpsを使用すると、binprogが「実行中」で、作業を行っているように見えます。すべてがエラーなしで実行されます。
この3番目の例でbinprogによって生成された出力がないのはなぜですか?
これを機能させるために私が試みることができるいくつかのことは何ですか?
[*]問題のプログラムはlibsvmのsvm-scaleです。例を一般化して、クリーンでシンプルに保つことにしました。
c++ - IIS での Windows 名前付きパイプ ACL
名前付きパイプを使用して CGI プロセスを Windows サービスに接続しようとしています。開発マシンで別のサーバーを使用してコードを正常に実行できますが、IIS では CGI プロセスで CreateFile() を呼び出すとセキュリティの問題が発生します。
Windows サービスは名前付きパイプ サーバーであるため、CGI プロセスはその名前付きパイプにクライアントとして接続しようとします。
次のコードを呼び出して、フラグ SECURITY_WORLD_SID_AUTHORITY を使用してグローバル セキュリティ記述子を作成するコードを掘り下げました。
しかし、私はその概念を本当に理解していません。Pipe Server CreateNamedPipe() は SECURITY_ATTRIBUTES 構造でこの ACL を使用して呼び出す必要があると想定していますが、Named Pipe クライアントはどうですか?
別のグローバル セキュリティ記述子を作成し、それで CreateFile() を呼び出す必要がありますか?
私はそれを継承しますか
CreateFile() 呼び出しで Null を渡すだけですか?
c# - mono/Linux での名前付きパイプからの読み取り/書き込み
Linux で名前付きパイプ/FIFO キューから読み書きしたいと考えています。System.IO の標準クラス StreamWriter やその他のクラスを試しましたが、シークを使用しているため失敗します。Mono を使用して名前付きパイプから読み書きしたことのある人はいますか? 私は読み書きを管理していますが、同時にではありません...
c++ - Win32 名前付きパイプとリモート クライアント
コンピューター A の IP アドレスを指定して、コンピューター B からコンピューター A の名前付きパイプにアクセスできますか? もしそうなら、これを実現するために何をする必要がありますか?