AnonymousPipeClientStream Class

Definition

Exposes the client side of an anonymous pipe stream, which supports both synchronous and asynchronous read and write operations (without cancellation support on Windows platforms).

public ref class AnonymousPipeClientStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeClientStream : System.IO.Pipes.PipeStream
type AnonymousPipeClientStream = class
    inherit PipeStream
Public NotInheritable Class AnonymousPipeClientStream
Inherits PipeStream
Inheritance
AnonymousPipeClientStream
Inheritance
AnonymousPipeClientStream

Examples

The following example sends a string from a parent process to a child process by using anonymous pipes. This example creates an AnonymousPipeServerStream object in a parent process with a PipeDirection value of Out. It also creates an AnonymousPipeClientStream object in a child process with a PipeDirection value of In. The parent process then sends a user-supplied string to the child process. The string is displayed to the console.

This example is for the client process, which is started by the server process. Name the resulting executable from the client code pipeClient.exe and copy it to the same directory as the server executable when you run this example. For the entire code example, including the code for both the pipe client and server, see How to: Use Anonymous Pipes for Local Interprocess Communication.

//<snippet01>
#using <System.Core.dll>

using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;

ref class PipeClient
{
public:
    static void Main(array<String^>^ args)
    {
        if (args->Length > 1)
        {
            PipeStream^ pipeClient = gcnew AnonymousPipeClientStream(PipeDirection::In, args[1]);

            Console::WriteLine("[CLIENT] Current TransmissionMode: {0}.",
                pipeClient->TransmissionMode);

            StreamReader^ sr = gcnew StreamReader(pipeClient);

            // Display the read text to the console
            String^ temp;

            // Wait for 'sync message' from the server.
            do
            {
                Console::WriteLine("[CLIENT] Wait for sync...");
                temp = sr->ReadLine();
            }
            while (!temp->StartsWith("SYNC"));

            // Read the server data and echo to the console.
            while ((temp = sr->ReadLine()) != nullptr)
            {
                Console::WriteLine("[CLIENT] Echo: " + temp);
            }
            sr->Close();
            pipeClient->Close();
        }
        Console::Write("[CLIENT] Press Enter to continue...");
        Console::ReadLine();
    }
};

int main()
{
    array<String^>^ args = Environment::GetCommandLineArgs();
    PipeClient::Main(args);
}
//</snippet01>
//<snippet01>
using System;
using System.IO;
using System.IO.Pipes;

class PipeClient
{
    static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            using (PipeStream pipeClient =
                new AnonymousPipeClientStream(PipeDirection.In, args[0]))
            {
                Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.",
                   pipeClient.TransmissionMode);

                using (StreamReader sr = new StreamReader(pipeClient))
                {
                    // Display the read text to the console
                    string temp;

                    // Wait for 'sync message' from the server.
                    do
                    {
                        Console.WriteLine("[CLIENT] Wait for sync...");
                        temp = sr.ReadLine();
                    }
                    while (!temp.StartsWith("SYNC"));

                    // Read the server data and echo to the console.
                    while ((temp = sr.ReadLine()) != null)
                    {
                        Console.WriteLine("[CLIENT] Echo: " + temp);
                    }
                }
            }
        }
        Console.Write("[CLIENT] Press Enter to continue...");
        Console.ReadLine();
    }
}
//</snippet01>
'<snippet01>
Imports System.IO
Imports System.IO.Pipes

Class PipeClient
    Shared Sub Main(args() as String)
        If args.Length > 0 Then
            Using pipeClient As New AnonymousPipeClientStream(PipeDirection.In, args(0))
                Console.WriteLine("[CLIENT] Current TransmissionMode: {0}.", _
                   pipeClient.TransmissionMode)

                Using sr As New StreamReader(pipeClient)
                    ' Display the read text to the console
                    Dim temp As String

                    ' Wait for 'sync message' from the server.
                    Do
                        Console.WriteLine("[CLIENT] Wait for sync...")
                        temp = sr.ReadLine()
                    Loop While temp.StartsWith("SYNC") = False

                    ' Read the server data and echo to the console.
                    temp = sr.ReadLine()
                    While Not temp = Nothing
                        Console.WriteLine("[CLIENT] Echo: " + temp)
                        temp = sr.ReadLine()
                    End While
                End Using
            End Using
        End If
        Console.Write("[CLIENT] Press Enter to continue...")
        Console.ReadLine()
    End Sub
End Class
'</snippet01>

Remarks

Anonymous pipes help provide safe and secure interprocess communication between child and parent processes. The AnonymousPipeClientStream class enables a child process to connect to and exchange information with a parent process.

Anonymous pipes are unnamed, one-way pipes that typically transfer data between parent and child processes. Anonymous pipes are always local; they cannot be used over a network. A PipeDirection value of InOut is not supported because anonymous pipes are defined to be one-way.

Anonymous pipes do not support the PipeTransmissionMode.Message read mode.

The client side of an anonymous pipe must be created from a pipe handle provided by the server side by calling the GetClientHandleAsString method. The string is then passed as a parameter when creating the client process. From the client process, it is passed to the AnonymousPipeClientStream constructor as the pipeHandleAsString parameter.

On Windows, asynchronous (overlapped) read and write operations are not supported by anonymous pipes (see https://docs.microsoft.com/en-us/windows/win32/ipc/anonymous-pipe-operations). The AnonymousPipeClientStream class will still schedule work on the thread pool on Windows platforms so asynchronous Stream operations work, but cancellation of those operations is not supported.

Constructors

AnonymousPipeClientStream(PipeDirection, SafePipeHandle)

Initializes a new instance of the AnonymousPipeClientStream class from the specified handle.

AnonymousPipeClientStream(PipeDirection, String)

Initializes a new instance of the AnonymousPipeClientStream class with the specified pipe direction and a string representation of the pipe handle.

AnonymousPipeClientStream(String)

Initializes a new instance of the AnonymousPipeClientStream class with the specified string representation of the pipe handle.

Properties

CanRead

Gets a value indicating whether the current stream supports read operations.

(Inherited from PipeStream)
CanSeek

Gets a value indicating whether the current stream supports seek operations.

(Inherited from PipeStream)
CanTimeout

Gets a value that determines whether the current stream can time out.

(Inherited from Stream)
CanWrite

Gets a value indicating whether the current stream supports write operations.

(Inherited from PipeStream)
InBufferSize

Gets the size, in bytes, of the inbound buffer for a pipe.

(Inherited from PipeStream)
IsAsync

Gets a value indicating whether a PipeStream object was opened asynchronously or synchronously.

(Inherited from PipeStream)
IsConnected

Gets or sets a value indicating whether a PipeStream object is connected.

(Inherited from PipeStream)
IsHandleExposed

Gets a value indicating whether a handle to a PipeStream object is exposed.

(Inherited from PipeStream)
IsMessageComplete

Gets a value indicating whether there is more data in the message returned from the most recent read operation.

(Inherited from PipeStream)
Length

Gets the length of a stream, in bytes.

(Inherited from PipeStream)
OutBufferSize

Gets the size, in bytes, of the outbound buffer for a pipe.

(Inherited from PipeStream)
Position

Gets or sets the current position of the current stream.

(Inherited from PipeStream)
ReadMode

Sets the reading mode for the AnonymousPipeClientStream object.

ReadTimeout

Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(Inherited from Stream)
SafePipeHandle

Gets the safe handle for the local end of the pipe that the current PipeStream object encapsulates.

(Inherited from PipeStream)
TransmissionMode

Gets the pipe transmission mode supported by the current pipe.

WriteTimeout

Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Inherited from Stream)

Methods

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous read operation.

(Inherited from PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous write operation.

(Inherited from PipeStream)
CheckPipePropertyOperations()

Verifies that the pipe is in a proper state for getting or setting properties.

(Inherited from PipeStream)
CheckReadOperations()

Verifies that the pipe is in a connected state for read operations.

(Inherited from PipeStream)
CheckWriteOperations()

Verifies that the pipe is in a connected state for write operations.

(Inherited from PipeStream)
Close()

Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Instead of calling this method, ensure that the stream is properly disposed.

(Inherited from Stream)
CopyTo(Stream)

Reads the bytes from the current stream and writes them to another stream. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CopyTo(Stream, Int32)

Reads the bytes from the current stream and writes them to another stream, using a specified buffer size. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CopyToAsync(Stream)

Asynchronously reads the bytes from the current stream and writes them to another stream. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CopyToAsync(Stream, CancellationToken)

Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CopyToAsync(Stream, Int32)

Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token. Both streams positions are advanced by the number of bytes copied.

(Inherited from Stream)
CreateObjRef(Type)

Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
CreateWaitHandle()
Obsolete.
Obsolete.
Obsolete.

Allocates a WaitHandle object.

(Inherited from Stream)
Dispose()

Releases all resources used by the Stream.

(Inherited from Stream)
Dispose(Boolean)

Releases the unmanaged resources used by the PipeStream class and optionally releases the managed resources.

(Inherited from PipeStream)
DisposeAsync()

Asynchronously releases the unmanaged resources used by the Stream.

(Inherited from Stream)
EndRead(IAsyncResult)

Ends a pending asynchronous read request.

(Inherited from PipeStream)
EndWrite(IAsyncResult)

Ends a pending asynchronous write request.

(Inherited from PipeStream)
Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize()

Releases unmanaged resources and performs other cleanup operations before the AnonymousPipeClientStream instance is reclaimed by garbage collection.

Flush()

Clears the buffer for the current stream and causes any buffered data to be written to the underlying device.

(Inherited from PipeStream)
FlushAsync()

Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Inherited from Stream)
FlushAsync(CancellationToken)

Asynchronously clears the buffer for the current stream and causes any buffered data to be written to the underlying device.

(Inherited from PipeStream)
GetAccessControl()

Gets a PipeSecurity object that encapsulates the access control list (ACL) entries for the pipe described by the current PipeStream object.

(Inherited from PipeStream)
GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetLifetimeService()
Obsolete.

Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetType()

Gets the Type of the current instance.

(Inherited from Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean)

Initializes a PipeStream object from the specified SafePipeHandle object.

(Inherited from PipeStream)
InitializeLifetimeService()
Obsolete.

Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean)

Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
ObjectInvariant()
Obsolete.

Provides support for a Contract.

(Inherited from Stream)
Read(Byte[], Int32, Int32)

Reads a block of bytes from a stream and writes the data to a specified buffer starting at a specified position for a specified length.

(Inherited from PipeStream)
Read(Span<Byte>)

Reads a sequence of bytes from the current stream, writes them to a byte array, and advances the position within the stream by the number of bytes read.

(Inherited from PipeStream)
ReadAsync(Byte[], Int32, Int32)

Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Inherited from Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronously reads a sequence of bytes from the current stream to a byte array starting at a specified position for a specified number of bytes, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

(Inherited from PipeStream)
ReadAsync(Memory<Byte>, CancellationToken)

Asynchronously reads a sequence of bytes from the current stream, writes them to a byte memory range, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

(Inherited from PipeStream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Reads at least a minimum number of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Inherited from Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Asynchronously reads at least a minimum number of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

(Inherited from Stream)
ReadByte()

Reads a byte from a pipe.

(Inherited from PipeStream)
ReadExactly(Byte[], Int32, Int32)

Reads count number of bytes from the current stream and advances the position within the stream.

(Inherited from Stream)
ReadExactly(Span<Byte>)

Reads bytes from the current stream and advances the position within the stream until the buffer is filled.

(Inherited from Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronously reads count number of bytes from the current stream, advances the position within the stream, and monitors cancellation requests.

(Inherited from Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Asynchronously reads bytes from the current stream, advances the position within the stream until the buffer is filled, and monitors cancellation requests.

(Inherited from Stream)
Seek(Int64, SeekOrigin)

Sets the current position of the current stream to the specified value.

(Inherited from PipeStream)
SetAccessControl(PipeSecurity)

Applies the access control list (ACL) entries specified by a PipeSecurity object to the pipe specified by the current PipeStream object.

(Inherited from PipeStream)
SetLength(Int64)

Sets the length of the current stream to the specified value.

(Inherited from PipeStream)
ToString()

Returns a string that represents the current object.

(Inherited from Object)
WaitForPipeDrain()

Waits for the other end of the pipe to read all sent bytes.

(Inherited from PipeStream)
Write(Byte[], Int32, Int32)

Writes a block of bytes to the current stream using data from a buffer.

(Inherited from PipeStream)
Write(ReadOnlySpan<Byte>)

Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Inherited from PipeStream)
WriteAsync(Byte[], Int32, Int32)

Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Inherited from Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Asynchronously writes a specified number of bytes from a byte array starting at a specified position, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

(Inherited from PipeStream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

(Inherited from PipeStream)
WriteByte(Byte)

Writes a byte to the current stream.

(Inherited from PipeStream)

Extension Methods

GetAccessControl(PipeStream)

Returns the security information of a pipe stream.

SetAccessControl(PipeStream, PipeSecurity)

Changes the security attributes of an existing pipe stream.

ConfigureAwait(IAsyncDisposable, Boolean)

Configures how awaits on the tasks returned from an async disposable are performed.

Applies to