1. Vorwort
Ich habe bereits über die allgemeinen Prinzipien von Console.WriteLine im laufenden Prozess von Console.WriteLine unter Windows gesprochen. Wissen Sie? Dieser Artikel wirft einen Blick auf den neuesten .NET9-Laufprozess unter Linux-x64
2. Verwalteter Code
In .NET werden die beiden Klassen StreamReader und StreamWriter normalerweise für Stream-Lese- und Schreibvorgänge verwendet, und ihre Namespaces befinden sich in System.IO. Diese Klassen sind in der verwalteten Bibliothek System.Runtime.dll enthalten. Hier ist eine einfache Beispieloperation:
using (StreamWriter writer = File.CreateText("newfile.txt")) { await writer.WriteLineAsync("First line of example"); await writer.WriteLineAsync("and second line"); }
StreamWriter und StreamReader sind von TextWriter bzw. TextReader abgeleitet. Die von Console.WriteLine gedruckte Zeichenfolge ist der Datenstrom/Gerät, der direkt über TextWriter in die CLR-Bibliothek geschrieben wird.
Zum Beispiel:
static void Main(string[] args) { Console.WriteLine("Call Main"); }
Console.WriteLine ruft die Funktion Out.EnsureInitialized auf. Out ist der Typ TextWriter. Der Code lautet wie folgt:
源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs public static TextWriter Out { get { static TextWriter EnsureInitialized() { lock (s_syncObject) { if (s_out == null) { Volatile.Write(ref s_out, CreateOutputWriter(ConsolePal.OpenStandardOutput())); } return s_out; } } } }
Die Funktion „EnsureInitialized“ ruft die Funktion „Volatile.Write“ auf, um den Wert von Parameter zwei in das Feld „Parameter eins“ zu schreiben. Die Erklärung hier besteht darin, den von CreateOutputWriter(ConsolePal.OpenStandardOutput()) zurückgegebenen Wert in das Feld s_out zu schreiben. s_out ist ebenfalls ein TextWriter-Typ.
Hier ist der von CreateOutputWriter(ConsolePal.OpenStandardOutput()) zurückgegebene Wert. Die CreateOutputWriter-Funktion lautet wie folgt:
源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs private static TextWriter CreateOutputWriter(Stream outputStream) { return outputStream == Stream.Null ? TextWriter.Null : TextWriter.Synchronized(new StreamWriter( stream: outputStream, encoding: OutputEncoding.RemovePreamble(), bufferSize: WriteBufferSize, leaveOpen: true) { AutoFlush = true }); }
Sie können sehen, dass CreateOutputWriter immer noch TextWriter zurückgibt, was bedeutet, dass Volatile.Write Stream-Daten in Stream-Daten schreibt und diese dann vom Gerät ausdruckt.
Was ist der hier geschriebene Stream-Datenwert? Schauen Sie sich weiterhin die Funktion ConsolePal.OpenStandardOutput() an, die einen Stream-Typ zurückgibt.
源码地址: https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/ConsolePal.Unix.cs public static Stream OpenStandardOutput() { return new UnixConsoleStream(Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO)), FileAccess.Write); }
Hier sind die Operationen unter Linux/Unix. Eine UnixConsoleStream-Klasse wird im Konstruktor von UnixConsoleStream instanziiert. Interop.Sys.Dup ist eine Funktion unter Linux, die Dateitabelleneintragsvorgänge ausführt. CheckIo ist eine Prüffunktion und kann hier ignoriert werden.
Im Allgemeinen erfolgt unter Linux beispielsweise das Drucken einer „Hallo Welt“ auf dem Terminal normalerweise über printf („Hallo Word“)
printf -> stdout(标准输出) -> Dup(STDOUT_FILENO) ->终端输出
Es ist ersichtlich, dass unter Linux der Parameter STDOUT_FILENO für Terminaloperationen über die Dup-Funktion übergeben wird. Der zweite Parameter von UnixConsoleStream ist FileAccess.Write, was das Schreiben einer Zeichenfolge bedeutet. Kapseln Sie dann diesen Stream und geben Sie ihn zurück, schreiben Sie ihn über Volatile.Write in den Terminal-Stream und drucken Sie ihn aus.
Dann ist es eigentlich ganz klar. Der Ablauf ist ungefähr wie folgt:
Console.WriteLine ->Out.EnsureInitialized -> ConsolePal.OpenStandardOutput() -> I
Das obige ist der detaillierte Inhalt vonPrinzip von Console.WriteLine unter .NET9 Linux-x64. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Wenn Sie sich bei einem neuen Gerät in Ihrem Roblox -Konto anmelden möchten, ohne das Kennwort einzugeben, kann das Roblox Quick Login Ihnen dabei helfen. In diesem Beitrag von PHP.CN werden Sie mit den vollständigen Schritten mit den Funktionen der Roblox Quick Login verwendet.

Hogwarts Legacy ist jetzt auf PS5, Xbox Series X/S und PC erhältlich. Welches ist am besten für Hogwarts Legacy? Wenn Sie verwirrt sind, machen Sie sich keine Sorgen. In diesem Beitrag bietet Php.cn ein Tutorial über Hogwarts Legacy PC gegen PS5 gegen Xbox Series X/S, und Sie können einen Blick darauf werfen.

In diesem Beitrag zeigt Ihnen die Php.cn -Software einige Informationen über Realtek USB GBE Family Controller, einschließlich der Definition, der Verwendung und des Herunterladens des Realtek USB GBE Family Controller -Treibers auf Ihrem Windows 10/11 -Computer.

Der entscheidende T700 PCIe Gen5 NVMe SSD wurde für einen Zeitraum freigesetzt. Sie können diesem Beitrag folgen, um die verwandten Informationen zu dieser SSD zu erfahren, die eine Rekordleistung aufweisen. In diesem Beitrag stellen wir auch eine Php.cn -Software vor, mit der Sie die SS verwalten können

Wenn Sie eine Geforce RTX 4090 TI in der Hand haben, ist es wichtig, den entsprechenden Treiber rechtzeitig herunterzuladen und zu installieren, damit er ordnungsgemäß funktioniert. Wenn Sie darüber verwirrt sind, wie dies zu tun ist, befolgen Sie diese Anleitung auf der PHP.CN -Website, um ein detailliertes Tutorial zu erhalten.

Die meisten Menschen denken, dass es schädlicher ist, einen Bildschirm im Dunkeln zu betrachten. Das scharfe Licht lässt Ihre Augen leicht beschädigt. Daher verfolgen viele Menschen einen dunklen Modus, um den Schaden zu senken. Aber ist es wirklich nützlich? Ist der dunkle Modus auf Noti verfügbar

Wenn Sie sich über Valheim beschweren, die auf dem Laden des Lades festsitzen und nicht wissen, was zu tun ist. Diese Anleitung zur Website von PHP.CN hilft Ihnen, geeignete Lösungen zu finden. Probieren Sie die nacheinander genannten Lösungen aus, bis Ihr Problem weg ist.

Wenn Sie das Fenster häufig verwenden, um Tools oder Dokumente direkt zu öffnen, werden Sie feststellen, dass die Matching -Liste immer länger und länger wird. Einige Leute suchen nach Methoden, um die Laufverlauf zu klären, damit sie sauber aussieht. Dieser php.cn -Beitrag könnte gi sein


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Dreamweaver CS6
Visuelle Webentwicklungstools
