AnonymousPipeServerStream クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
同期操作と非同期読み取り操作と書き込み操作の両方をサポートする匿名パイプの周囲のストリームを公開します。
public ref class AnonymousPipeServerStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeServerStream : System.IO.Pipes.PipeStream
type AnonymousPipeServerStream = class
inherit PipeStream
Public NotInheritable Class AnonymousPipeServerStream
Inherits PipeStream
- 継承
- 継承
例
次の例では、親プロセスから匿名パイプを使用して子プロセスに文字列を送信します。 次の使用例は、PipeDirection 値が PipeDirection.Outの親プロセスに AnonymousPipeServerStream オブジェクトを作成します。また、PipeDirection 値が PipeDirection.Inの子プロセスに AnonymousPipeClientStream オブジェクトも作成します。 その後、親プロセスは、ユーザー指定の文字列を子プロセスに送信します。 文字列がコンソールに表示されます。
この例は、AnonymousPipeServerStream クラスを使用するサーバー プロセス用です。 パイプ クライアントとサーバーの両方のコードを含むコード例全体については、「方法: ローカルプロセス間通信に匿名パイプを使用する」を参照してください。
//<snippet01>
#using <System.dll>
#using <System.Core.dll>
using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;
using namespace System::Diagnostics;
ref class PipeServer
{
public:
static void Main()
{
Process^ pipeClient = gcnew Process();
pipeClient->StartInfo->FileName = "pipeClient.exe";
AnonymousPipeServerStream^ pipeServer =
gcnew AnonymousPipeServerStream(PipeDirection::Out,
HandleInheritability::Inheritable);
Console::WriteLine("[SERVER] Current TransmissionMode: {0}.",
pipeServer->TransmissionMode);
// Pass the client process a handle to the server.
pipeClient->StartInfo->Arguments =
pipeServer->GetClientHandleAsString();
pipeClient->StartInfo->UseShellExecute = false;
pipeClient->Start();
pipeServer->DisposeLocalCopyOfClientHandle();
try
{
// Read user input and send that to the client process.
StreamWriter^ sw = gcnew StreamWriter(pipeServer);
sw->AutoFlush = true;
// Send a 'sync message' and wait for client to receive it.
sw->WriteLine("SYNC");
pipeServer->WaitForPipeDrain();
// Send the console input to the client process.
Console::Write("[SERVER] Enter text: ");
sw->WriteLine(Console::ReadLine());
sw->Close();
}
// Catch the IOException that is raised if the pipe is broken
// or disconnected.
catch (IOException^ e)
{
Console::WriteLine("[SERVER] Error: {0}", e->Message);
}
pipeServer->Close();
pipeClient->WaitForExit();
pipeClient->Close();
Console::WriteLine("[SERVER] Client quit. Server terminating.");
}
};
int main()
{
PipeServer::Main();
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;
class PipeServer
{
static void Main()
{
Process pipeClient = new Process();
pipeClient.StartInfo.FileName = "pipeClient.exe";
using (AnonymousPipeServerStream pipeServer =
new AnonymousPipeServerStream(PipeDirection.Out,
HandleInheritability.Inheritable))
{
Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
pipeServer.TransmissionMode);
// Pass the client process a handle to the server.
pipeClient.StartInfo.Arguments =
pipeServer.GetClientHandleAsString();
pipeClient.StartInfo.UseShellExecute = false;
pipeClient.Start();
pipeServer.DisposeLocalCopyOfClientHandle();
try
{
// Read user input and send that to the client process.
using (StreamWriter sw = new StreamWriter(pipeServer))
{
sw.AutoFlush = true;
// Send a 'sync message' and wait for client to receive it.
sw.WriteLine("SYNC");
pipeServer.WaitForPipeDrain();
// Send the console input to the client process.
Console.Write("[SERVER] Enter text: ");
sw.WriteLine(Console.ReadLine());
}
}
// Catch the IOException that is raised if the pipe is broken
// or disconnected.
catch (IOException e)
{
Console.WriteLine("[SERVER] Error: {0}", e.Message);
}
}
pipeClient.WaitForExit();
pipeClient.Close();
Console.WriteLine("[SERVER] Client quit. Server terminating.");
}
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes
Imports System.Diagnostics
Class PipeServer
Shared Sub Main()
Dim pipeClient As New Process()
pipeClient.StartInfo.FileName = "pipeClient.exe"
Using pipeServer As New AnonymousPipeServerStream(PipeDirection.Out, _
HandleInheritability.Inheritable)
Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
pipeServer.TransmissionMode)
' Pass the client process a handle to the server.
pipeClient.StartInfo.Arguments = pipeServer.GetClientHandleAsString()
pipeClient.StartInfo.UseShellExecute = false
pipeClient.Start()
pipeServer.DisposeLocalCopyOfClientHandle()
Try
' Read user input and send that to the client process.
Using sw As New StreamWriter(pipeServer)
sw.AutoFlush = true
' Send a 'sync message' and wait for client to receive it.
sw.WriteLine("SYNC")
pipeServer.WaitForPipeDrain()
' Send the console input to the client process.
Console.Write("[SERVER] Enter text: ")
sw.WriteLine(Console.ReadLine())
End Using
Catch e As IOException
' Catch the IOException that is raised if the pipe is broken
' or disconnected.
Console.WriteLine("[SERVER] Error: {0}", e.Message)
End Try
End Using
pipeClient.WaitForExit()
pipeClient.Close()
Console.WriteLine("[SERVER] Client quit. Server terminating.")
End Sub
End Class
'</snippet01>
注釈
匿名パイプは、子プロセスと親プロセス間の安全で安全なプロセス間通信を提供するのに役立ちます。 AnonymousPipeServerStream クラスを使用すると、親プロセスは子プロセスから情報を送受信できます。
匿名パイプは、親プロセスと子プロセスの間で通常データを転送する名前のない一方向パイプです。 匿名パイプは常にローカルです。ネットワーク経由では使用できません。 匿名パイプは一方向として定義されているため、InOut の PipeDirection 値はサポートされていません。
匿名パイプは、PipeTransmissionMode.Message 読み取りモードをサポートしていません。
匿名パイプのクライアント側は、GetClientHandleAsString メソッドを呼び出すことによって、サーバー側から提供されるパイプ ハンドルから作成する必要があります。 この文字列は、クライアント プロセスの作成時にパラメーターとして渡されます。 クライアント プロセスから、pipeHandleAsString
パラメーターとして AnonymousPipeClientStream コンストラクターに渡されます。
AnonymousPipeServerStream オブジェクトは、クライアントの終了時に通知を受け取るために、DisposeLocalCopyOfClientHandle メソッドを使用してクライアント ハンドルを破棄する必要があります。
コンストラクター
AnonymousPipeServerStream() |
AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
AnonymousPipeServerStream(PipeDirection) |
指定したパイプ方向を使用して、AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
AnonymousPipeServerStream(PipeDirection, HandleInheritability) |
指定したパイプ方向と継承モードを使用して、AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32) |
指定したパイプ方向、継承モード、バッファー サイズを使用して、AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity) |
指定したパイプ方向、継承モード、バッファー サイズ、およびパイプ セキュリティを使用して、AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle) |
指定したパイプ ハンドルから、AnonymousPipeServerStream クラスの新しいインスタンスを初期化します。 |
プロパティ
CanRead |
現在のストリームが読み取り操作をサポートしているかどうかを示す値を取得します。 (継承元 PipeStream) |
CanSeek |
現在のストリームがシーク操作をサポートしているかどうかを示す値を取得します。 (継承元 PipeStream) |
CanTimeout |
現在のストリームがタイムアウトできるかどうかを決定する値を取得します。 (継承元 Stream) |
CanWrite |
現在のストリームが書き込み操作をサポートしているかどうかを示す値を取得します。 (継承元 PipeStream) |
ClientSafePipeHandle |
現在 AnonymousPipeServerStream オブジェクトに接続されている AnonymousPipeClientStream オブジェクトのセーフ ハンドルを取得します。 |
InBufferSize |
パイプの受信バッファーのサイズ (バイト単位) を取得します。 (継承元 PipeStream) |
IsAsync |
PipeStream オブジェクトが非同期または同期的に開かれたかどうかを示す値を取得します。 (継承元 PipeStream) |
IsConnected |
PipeStream オブジェクトが接続されているかどうかを示す値を取得または設定します。 (継承元 PipeStream) |
IsHandleExposed |
PipeStream オブジェクトへのハンドルが公開されているかどうかを示す値を取得します。 (継承元 PipeStream) |
IsMessageComplete |
最新の読み取り操作から返されたメッセージに、さらに多くのデータがあるかどうかを示す値を取得します。 (継承元 PipeStream) |
Length |
ストリームの長さをバイト単位で取得します。 (継承元 PipeStream) |
OutBufferSize |
パイプの送信バッファーのサイズ (バイト単位) を取得します。 (継承元 PipeStream) |
Position |
現在のストリームの現在位置を取得または設定します。 (継承元 PipeStream) |
ReadMode |
AnonymousPipeServerStream オブジェクトの読み取りモードを設定します。 匿名パイプの場合、伝送モードは Byteする必要があります。 |
ReadTimeout |
ストリームがタイムアウトするまでの読み取りを試行する時間を決定する値をミリ秒単位で取得または設定します。 (継承元 Stream) |
SafePipeHandle |
現在の PipeStream オブジェクトがカプセル化するパイプのローカル末尾のセーフ ハンドルを取得します。 (継承元 PipeStream) |
TransmissionMode |
現在のパイプでサポートされているパイプ伝送モードを取得します。 |
WriteTimeout |
ストリームがタイムアウトするまでの書き込みを試行する時間を決定する値をミリ秒単位で取得または設定します。 (継承元 Stream) |
メソッド
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期読み取り操作を開始します。 (継承元 PipeStream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
非同期書き込み操作を開始します。 (継承元 PipeStream) |
CheckPipePropertyOperations() |
プロパティを取得または設定するためにパイプが適切な状態であることを確認します。 (継承元 PipeStream) |
CheckReadOperations() |
読み取り操作のためにパイプが接続状態であることを確認します。 (継承元 PipeStream) |
CheckWriteOperations() |
書き込み操作でパイプが接続状態であることを確認します。 (継承元 PipeStream) |
Close() |
現在のストリームを閉じ、現在のストリームに関連付けられているリソース (ソケットやファイル ハンドルなど) を解放します。 このメソッドを呼び出す代わりに、ストリームが適切に破棄されていることを確認します。 (継承元 Stream) |
CopyTo(Stream) |
現在のストリームからバイトを読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyTo(Stream, Int32) |
現在のストリームからバイトを読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream) |
現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, CancellationToken) |
現在のストリームからバイトを非同期に読み取り、指定されたキャンセル トークンを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, Int32) |
現在のストリームからバイトを非同期に読み取り、指定されたバッファー サイズを使用して別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
指定したバッファー サイズとキャンセル トークンを使用して、現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。 どちらのストリーム位置も、コピーされたバイト数だけ進みます。 (継承元 Stream) |
CreateObjRef(Type) |
リモート オブジェクトとの通信に使用されるプロキシの生成に必要なすべての関連情報を含むオブジェクトを作成します。 (継承元 MarshalByRefObject) |
CreateWaitHandle() |
古い.
古い.
古い.
WaitHandle オブジェクトを割り当てます。 (継承元 Stream) |
Dispose() |
Streamで使用されているすべてのリソースを解放します。 (継承元 Stream) |
Dispose(Boolean) |
PipeStream クラスによって使用されるアンマネージ リソースを解放し、必要に応じてマネージド リソースを解放します。 (継承元 PipeStream) |
DisposeAsync() |
Streamによって使用されるアンマネージ リソースを非同期的に解放します。 (継承元 Stream) |
DisposeLocalCopyOfClientHandle() |
AnonymousPipeClientStream オブジェクトのハンドルのローカル コピーを閉じます。 |
EndRead(IAsyncResult) |
保留中の非同期読み取り要求を終了します。 (継承元 PipeStream) |
EndWrite(IAsyncResult) |
保留中の非同期書き込み要求を終了します。 (継承元 PipeStream) |
Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Finalize() |
AnonymousPipeServerStream インスタンスがガベージ コレクションによって再利用される前に、アンマネージ リソースを解放し、その他のクリーンアップ操作を実行します。 |
Flush() |
現在のストリームのバッファーをクリアし、バッファー内のデータを基になるデバイスに書き込みます。 (継承元 PipeStream) |
FlushAsync() |
このストリームのすべてのバッファーを非同期的にクリアし、バッファー内のデータを基になるデバイスに書き込みます。 (継承元 Stream) |
FlushAsync(CancellationToken) |
現在のストリームのバッファーを非同期的にクリアし、バッファー内のデータを基になるデバイスに書き込みます。 (継承元 PipeStream) |
GetAccessControl() |
現在の PipeStream オブジェクトによって記述されたパイプのアクセス制御リスト (ACL) エントリをカプセル化する PipeSecurity オブジェクトを取得します。 (継承元 PipeStream) |
GetClientHandleAsString() |
接続 AnonymousPipeClientStream オブジェクトのハンドルを文字列として取得します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
InitializeHandle(SafePipeHandle, Boolean, Boolean) |
指定した SafePipeHandle オブジェクトから PipeStream オブジェクトを初期化します。 (継承元 PipeStream) |
InitializeLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
ObjectInvariant() |
古い.
Contractのサポートを提供します。 (継承元 Stream) |
Read(Byte[], Int32, Int32) |
ストリームからバイト ブロックを読み取り、指定した長さの指定した位置から始まる指定したバッファーにデータを書き込みます。 (継承元 PipeStream) |
Read(Span<Byte>) |
現在のストリームからバイト シーケンスを読み取り、バイト配列に書き込み、読み取ったバイト数だけストリーム内の位置を進めます。 (継承元 PipeStream) |
ReadAsync(Byte[], Int32, Int32) |
現在のストリームからバイト シーケンスを非同期に読み取り、ストリーム内の位置を読み取ったバイト数だけ進めます。 (継承元 Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリームからバイト配列へのバイトシーケンスを、指定したバイト数の指定した位置から非同期に読み取り、ストリーム内の位置を読み取ったバイト数だけ進め、取り消し要求を監視します。 (継承元 PipeStream) |
ReadAsync(Memory<Byte>, CancellationToken) |
現在のストリームからバイト シーケンスを非同期に読み取り、バイト メモリ範囲に書き込み、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。 (継承元 PipeStream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
現在のストリームから少なくともバイト数を読み取り、読み取ったバイト数だけストリーム内の位置を進めます。 (継承元 Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
現在のストリームから少なくとも最小バイト数を非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。 (継承元 Stream) |
ReadByte() |
パイプからバイトを読み取ります。 (継承元 PipeStream) |
ReadExactly(Byte[], Int32, Int32) |
現在のストリーム |
ReadExactly(Span<Byte>) |
現在のストリームからバイトを読み取り、 |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
現在のストリーム |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
現在のストリームからバイトを非同期に読み取り、 |
Seek(Int64, SeekOrigin) |
現在のストリームの現在位置を指定した値に設定します。 (継承元 PipeStream) |
SetAccessControl(PipeSecurity) |
PipeSecurity オブジェクトで指定されたアクセス制御リスト (ACL) エントリを、現在の PipeStream オブジェクトで指定されたパイプに適用します。 (継承元 PipeStream) |
SetLength(Int64) |
現在のストリームの長さを指定した値に設定します。 (継承元 PipeStream) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
WaitForPipeDrain() |
パイプのもう一方の端が送信されたすべてのバイトを読み取るのを待機します。 (継承元 PipeStream) |
Write(Byte[], Int32, Int32) |
バッファーからのデータを使用して、現在のストリームにバイト ブロックを書き込みます。 (継承元 PipeStream) |
Write(ReadOnlySpan<Byte>) |
現在のストリームにバイト シーケンスを書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進めます。 (継承元 PipeStream) |
WriteAsync(Byte[], Int32, Int32) |
現在のストリームにバイト シーケンスを非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進めます。 (継承元 Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
指定した位置から始まるバイト配列から、指定したバイト数を非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進め、キャンセル要求を監視します。 (継承元 PipeStream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
現在のストリームにバイトシーケンスを非同期に書き込み、書き込まれたバイト数だけこのストリーム内の現在位置を進め、キャンセル要求を監視します。 (継承元 PipeStream) |
WriteByte(Byte) |
現在のストリームにバイトを書き込みます。 (継承元 PipeStream) |
拡張メソッド
CopyToAsync(Stream, PipeWriter, CancellationToken) |
キャンセル トークンを使用して、Stream からバイトを非同期に読み取り、指定した PipeWriterに書き込みます。 |
GetAccessControl(PipeStream) |
パイプ ストリームのセキュリティ情報を返します。 |
SetAccessControl(PipeStream, PipeSecurity) |
既存のパイプ ストリームのセキュリティ属性を変更します。 |
ConfigureAwait(IAsyncDisposable, Boolean) |
非同期破棄から返されるタスクの待機を実行する方法を構成します。 |
適用対象
.NET