Maison tutoriels informatiques connaissances en informatique Principe de Console.WriteLine sous .NET9 Linux-x64

Principe de Console.WriteLine sous .NET9 Linux-x64

Feb 23, 2024 am 09:04 AM
writer console

.NET9 Linux-x64下Console.WriteLine原理

1. J'ai déjà parlé des principes communs de Console.WriteLine dans le processus d'exécution de Console.WriteLine sous Windows. Le savez-vous ? Cet article examine son dernier processus en cours d'exécution .NET9 sous Linux-x64

2. Code géré

Dans .NET, les deux classes StreamReader et StreamWriter sont généralement utilisées pour les opérations de lecture et d'écriture de flux, et leurs espaces de noms sont situés dans System.IO. Ces classes sont incluses dans la bibliothèque gérée System.Runtime.dll. Voici un exemple d'opération simple :
using (StreamWriter writer = File.CreateText("newfile.txt"))
{
await writer.WriteLineAsync("First line of example");
await writer.WriteLineAsync("and second line");
}
Copier après la connexion
StreamWriter et StreamReader sont respectivement dérivés de TextWriter et TextReader. La chaîne imprimée par Console.WriteLine est le flux de données/périphérique écrit directement via TextWriter dans la bibliothèque CLR.

Par exemple :

static void Main(string[] args)
{
 Console.WriteLine("Call Main");
}
Copier après la connexion

Console.WriteLine appellera la fonction Out.EnsureInitialized. Out est le type TextWriter. Le code est le suivant :

源码地址: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;
}
}
}
}
Copier après la connexion

La fonction EnsureInitialized appelle la fonction Volatile.Write. La fonction Volatile.Write signifie écrire la valeur du paramètre deux dans le champ du paramètre un. L'explication ici est d'écrire la valeur renvoyée par CreateOutputWriter(ConsolePal.OpenStandardOutput()) dans le champ s_out. s_out est également un type TextWriter.

Voici la valeur renvoyée par CreateOutputWriter(ConsolePal.OpenStandardOutput()). La fonction CreateOutputWriter est la suivante :

源码地址: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
});
}
Copier après la connexion

Vous pouvez voir que CreateOutputWriter renvoie toujours TextWriter, ce qui signifie que Volatile.Write écrit des données de flux pour diffuser des données, puis les imprime à partir de l'appareil.

Quelle est la valeur des données de flux écrite ici ? Continuez à regarder la fonction ConsolePal.OpenStandardOutput(), qui renvoie un type Stream.

源码地址:
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);
}
Copier après la connexion

Voici les opérations sous Linux/Unix. Une classe UnixConsoleStream est instanciée dans OpenStandardOutput. Dans le constructeur d'UnixConsoleStream, le premier paramètre est Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO)). Interop.Sys.Dup est une fonction sous Linux qui effectue des opérations de saisie de tables de fichiers. CheckIo est une fonction de vérification et peut être ignorée ici.

Par exemple, de manière générale, sous Linux, l'impression d'un hello World sur le terminal se fait généralement via printf (« hello Word »)

printf -> stdout(标准输出) -> Dup(STDOUT_FILENO) ->终端输出
Copier après la connexion

On peut voir que sous Linux, le paramètre STDOUT_FILENO est passé via la fonction Dup pour les opérations du terminal. Le deuxième paramètre d'UnixConsoleStream est FileAccess.Write, ce qui signifie écrire une chaîne. Encapsulez ensuite ce Stream et renvoyez-le, écrivez-le dans le flux du terminal via Volatile.Write et imprimez-le.

Ensuite, c’est en fait très clair. Le processus est à peu près le suivant :

Console.WriteLine ->Out.EnsureInitialized -> ConsolePal.OpenStandardOutput() -> I
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Précommandes ouvertes pour la nouvelle actualisation de la Nintendo Switch Lite Précommandes ouvertes pour la nouvelle actualisation de la Nintendo Switch Lite Jun 29, 2024 am 06:49 AM

Nintendo a ouvert les précommandes pour la dernière version du Switch Lite (curr. 189,99 $ sur Amazon). Cependant, l’appareil n’est pas encore disponible à la commande dans le monde entier. Pour récapituler, la société a présenté la Switch Lite Hyrule Edition il y a près de deux semaines.

Que signifie consoler ? Que signifie consoler ? Sep 05, 2023 pm 02:43 PM

Console signifie console. Il s'agit d'un appareil ou d'un logiciel qui interagit avec un système informatique. Il s'agit généralement d'un appareil doté d'un clavier et d'un écran pour saisir et afficher des informations. La console était à l'origine utilisée pour les grands systèmes informatiques, puis également appliquée aux systèmes personnels. ordinateurs et serveurs, il peut aider les utilisateurs à gérer et à entretenir les systèmes informatiques, ainsi qu'à installer des systèmes d'exploitation et des applications, à déboguer des programmes, etc.

Effacer la sortie de la console à l'aide de la fonction Console.Clear en C# Effacer la sortie de la console à l'aide de la fonction Console.Clear en C# Nov 18, 2023 am 11:00 AM

Utilisez la fonction Console.Clear en C# pour effacer la sortie de la console Dans les applications de console C#, nous devons souvent effacer les informations de sortie dans la console pour afficher du nouveau contenu ou offrir une meilleure expérience utilisateur. C# fournit la fonction Console.Clear pour implémenter cette fonction, qui peut effacer la sortie dans la console et rendre l'interface à nouveau vide. Le format d'appel de la fonction Console.Clear est le suivant : Console.Clear(); Cette fonction ne nécessite aucune entrée.

Nintendo annonce une nouvelle actualisation de Switch Lite avant la sortie de Switch 2 Nintendo annonce une nouvelle actualisation de Switch Lite avant la sortie de Switch 2 Jun 20, 2024 am 09:41 AM

Nintendo a présenté hier de nombreux jeux lors de son dernier événement Nintendo Direct, dont nous avons fourni un aperçu séparément. De plus, la société a également annoncé une nouvelle version du Switch Lite (194,93 $ sur Amazon), peut-être

MagicX XU Mini M : Teardown révèle le processeur RK3326 au lieu du RK3562 annoncé, MagicX rompt les liens avec les développeurs tiers MagicX XU Mini M : Teardown révèle le processeur RK3326 au lieu du RK3562 annoncé, MagicX rompt les liens avec les développeurs tiers Sep 01, 2024 am 06:30 AM

Si vous avez acheté le MagicX XU Mini M récemment, cette nouvelle pourrait être une surprise. Un démontage matériel et logiciel de la nouvelle console portable a révélé que le processeur RK3562 annoncé est, en fait, un processeur RK3326 plus ancien et moins performant.

que signifie la console que signifie la console Aug 09, 2023 pm 04:21 PM

Une console est une console, une interface interactive utilisée dans les programmes informatiques pour saisir et sortir du texte ou des commandes. Dans différents systèmes d'exploitation et environnements de développement, la console peut avoir différentes apparences et fonctions. Il s'agit généralement d'une interface texte qui fournit une interface de ligne de commande ou une invite de ligne de commande, permettant à l'utilisateur de saisir des commandes via le clavier et d'afficher la sortie du programme.

Selon les rumeurs, la Nintendo Switch 2 obtiendrait des ports d'Assassin's Creed Shadows et des entrées précédentes de la série Selon les rumeurs, la Nintendo Switch 2 obtiendrait des ports d'Assassin's Creed Shadows et des entrées précédentes de la série Aug 14, 2024 pm 12:36 PM

La semaine dernière, Paul Gele, un initié connu du jeu, a déclaré que la prochaine Nintendo Switch 2 bénéficierait de ports AAA tiers majeurs au lancement. C'est quelque chose à espérer car l'ordinateur de poche de jeu de première génération n'a reçu aucun titre AAA au lancement. B

Quelle est l'interface de la console ? Quelle est l'interface de la console ? Aug 08, 2023 am 11:15 AM

L'interface de la console est un outil permettant de générer des informations dans la ligne de commande de l'ordinateur ou dans les outils de développement du navigateur. Elle fournit un moyen simple d'enregistrer et d'afficher les résultats de sortie et les informations de débogage de l'application. En utilisant l'interface console, les développeurs peuvent identifier et résoudre les problèmes plus efficacement, optimiser les performances des applications et améliorer l'efficacité du développement. Que ce soit dans les outils de développement en ligne de commande ou dans le navigateur, l’interface console est un outil indispensable.

See all articles