public void Initialize(bool alreadyActive) { // Console is always considered active on Unix ConsoleActive = true; StdoutRedirected = UnixStreamHelper.isatty(1) != 1; var duplicateStream = UnixStreamHelper.CreateDuplicateStream(1); if (UseMonoTtyDriver && !StdoutRedirected) { // Mono implementation handles xterm for us var writer = ConsoleWriter.CreateConsoleStreamWriter(duplicateStream, Console.Out.Encoding, true); StandardOut = TextWriter.Synchronized(writer); var driver = AccessTools.Field(AccessTools.TypeByName("System.ConsoleDriver"), "driver").GetValue(null); AccessTools.Field(AccessTools.TypeByName("System.TermInfoDriver"), "stdout").SetValue(driver, writer); } else { // Handle TTY ourselves var writer = new StreamWriter(duplicateStream, Console.Out.Encoding); writer.AutoFlush = true; StandardOut = TextWriter.Synchronized(writer); TtyInfo = TtyHandler.GetTtyInfo(); } ConsoleOut = StandardOut; }
public UnixStream(int fileDescriptor, FileAccess access) { Access = access; var newFd = UnixStreamHelper.dup(fileDescriptor); FileHandle = UnixStreamHelper.fdopen(newFd, access == FileAccess.Write ? "w" : "r"); }