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;
        }
Exemple #2
0
        public UnixStream(int fileDescriptor, FileAccess access)
        {
            Access = access;

            var newFd = UnixStreamHelper.dup(fileDescriptor);

            FileHandle = UnixStreamHelper.fdopen(newFd, access == FileAccess.Write ? "w" : "r");
        }