| File: System\ConsolePal.Unix.ConsoleStream.cs | Web Access |
| Project: src\runtime\src\libraries\System.Console\src\System.Console.csproj (System.Console) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.IO; using Microsoft.Win32.SafeHandles; namespace System { internal static partial class ConsolePal { /// <summary>Provides a stream to use for Unix console input or output.</summary> private sealed class UnixConsoleStream : ConsoleStream { /// <summary>The file descriptor for the opened file.</summary> private readonly SafeFileHandle _handle; private readonly bool _useReadLine; /// <summary>Initialize the stream.</summary> /// <param name="handle">The file handle wrapped by this stream.</param> /// <param name="access">FileAccess.Read or FileAccess.Write.</param> /// <param name="useReadLine">Use ReadLine API for reading.</param> internal UnixConsoleStream(SafeFileHandle handle, FileAccess access, bool useReadLine = false) : base(access) { Debug.Assert(handle != null, "Expected non-null console handle"); Debug.Assert(!handle.IsInvalid, "Expected valid console handle"); _handle = handle; _useReadLine = useReadLine; } protected override void Dispose(bool disposing) { if (disposing) { _handle.Dispose(); } base.Dispose(disposing); } public override int Read(Span<byte> buffer) => #if !TARGET_WASI _useReadLine ? ConsolePal.StdInReader.ReadLine(buffer) : #endif ConsolePal.Read(_handle, buffer); public override void Write(ReadOnlySpan<byte> buffer) => ConsolePal.WriteFromConsoleStream(_handle, buffer); public override void Flush() { if (_handle.IsClosed) { throw Error.GetFileNotOpen(); } base.Flush(); } } } }