ホームページ  >  記事  >  コンピューターのチュートリアル  >  .NET9 Linux-x64 における Console.WriteLine の原理

.NET9 Linux-x64 における Console.WriteLine の原理

WBOY
WBOY転載
2024-02-23 09:04:10601ブラウズ

.NET9 Linux-x64下Console.WriteLine原理

#1 はじめに

Windows での Console.WriteLine の実行プロセスにおける Console.WriteLine の共通原則について説明しました。この記事では、Linux-x64

での最新の .NET9 実行プロセスについて説明します。

2. マネージ コード

.NET では、通常、ストリームの読み取りおよび書き込み操作に StreamReader および StreamWriter という 2 つのクラスが使用され、それらの名前空間は System.IO にあります。これらのクラスは、マネージド ライブラリ System.Runtime.dll に含まれています。簡単な操作例を次に示します:

リーリー

StreamWriter と StreamReader は、それぞれ TextWriter と TextReader から派生します。 Console.WriteLine によって出力される文字列は、CLR ライブラリの TextWriter を通じて直接書き込まれたデータ ストリーム/デバイスです。

###例えば: ### リーリー

Console.WriteLine は Out.EnsureInitialized 関数を呼び出します。Out は TextWriter 型です。コードは次のとおりです:

リーリー

EnsureInitialized 関数は、Volatile.Write 関数を呼び出します。Volatile.Write 関数は、パラメーター 2 の値をパラメーター 1 フィールドに書き込むことを意味します。ここでの説明は、CreateOutputWriter(ConsolePal.OpenStandardOutput()) によって返された値を s_out フィールドに書き込むことです。s_out も TextWriter 型です。

CreateOutputWriter(ConsolePal.OpenStandardOutput()) によって返される値は次のとおりです。 CreateOutputWriter 関数は次のとおりです:

リーリー

CreateOutputWriter が引き続き TextWriter を返すことがわかります。これは、Volatile.Write がストリーム データをストリーム データに書き込み、それをデバイスから出力することを意味します。

ここに書かれているストリームデータの値は何ですか?引き続き、Stream タイプを返す ConsolePal.OpenStandardOutput() 関数を見てみましょう。

リーリー

Linux/Unix での操作は次のとおりです。UnixConsoleStream クラスは OpenStandardOutput でインスタンス化されます。UnixConsoleStream のコンストラクターの最初のパラメーターは Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO) ) です。 Interop.Sys.Dup は、ファイル テーブル エントリ操作を実行する Linux 上の関数です。 CheckIo はチェック関数なので、ここでは無視できます。

たとえば、一般的に、Linux のターミナルで hello World を出力するには、通常 printf("hello Word") を使用します。 リーリー

Linux では、パラメータ STDOUT_FILENO が端末操作の Dup 関数に渡されることがわかります。UnixConsoleStream の 2 番目のパラメータは FileAccess.Write で、これは文字列の書き込みを意味します。次に、このストリームをカプセル化して返し、Volatile.Write を通じて端末ストリームに書き込み、出力します。

それは実際には非常に明確であり、そのプロセスは大まかに次のとおりです:

リーリー

以上が.NET9 Linux-x64 における Console.WriteLine の原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はmryunwei.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。