2

PHP から Windows の名前付きパイプを複数回開くことができないようです。

$pipe1 = fopen($pipeName, 'r+');  // (1)
fclose($pipe1);
$pipe2 = fopen($pipeName, 'r+');  // (2)
fclose($pipe2);

(1) が成功し、パイプに書き込むか、ブロック読み取りを開くことができます。

(2) で失敗する

fopen(\\.\pipe\encoding): ストリームを開けませんでした: 引数が無効です

「無効な引数」はモードを参照しているようですが、(1) と (2) の間でモードのさまざまな組み合わせをすべて試しましたが、違いはありませんでした。また、同じプロセスであろうと別のプロセスであろうと失敗します。

私はパイプを作成しています:

CreateNamedPipe("\\\\.\\pipe\\encoding", 3, 0, 5, 512, 512, 0, 0);

ここで、「3」は読み取り/書き込みパイプになり、「5」は作成できるインスタンスの最大数です。CreateNamedPipeの引数のさまざまな組み合わせも試しましたが、役に立ちませんでした。

Windows の名前付きパイプについて見逃している特別なものはありますか?

4

1 に答える 1

2

「サーバー プロセスは、ConnectNamedPipe 関数を使用してパイプ ハンドルを別のクライアントに接続する前に、DisconnectNamedPipe を呼び出して前のクライアントからパイプ ハンドルを切断する必要があります。」

于 2012-05-12T17:07:56.303 に答える