>  기사  >  컴퓨터 튜토리얼  >  .NET9 Linux-x64에서 Console.WriteLine의 원리

.NET9 Linux-x64에서 Console.WriteLine의 원리

WBOY
WBOY앞으로
2024-02-23 09:04:10655검색

.NET9 Linux-x64下Console.WriteLine原理

1. 서문

Windows에서 Console.WriteLine이 실행되는 과정에서 Console.WriteLine의 공통 원칙에 대해 이전에 이야기한 적이 있습니다. 이 기사에서는 Linux-x64

에서 실행되는 최신 .NET9 프로세스를 살펴봅니다.

2. 관리 코드

.NET에서는 StreamReader와 StreamWriter 두 클래스가 일반적으로 스트림 읽기 및 쓰기 작업에 사용되며 해당 네임스페이스는 System.IO에 있습니다. 이러한 클래스는 관리되는 라이브러리 System.Runtime.dll에 포함되어 있습니다. 다음은 간단한 작업 예시입니다:

으아악

StreamWriter 및 StreamReader는 각각 TextWriter 및 TextReader에서 파생됩니다. Console.WriteLine에 의해 인쇄된 문자열은 CLR 라이브러리의 TextWriter를 통해 직접 작성된 데이터 스트림/장치입니다.

예:

으아악

Console.WriteLine은 Out.EnsureInitialized 함수를 호출합니다. Out은 TextWriter 유형입니다.

으아악

EnacheInitialized 함수는 Volatile.Write 함수를 호출합니다. Volatile.Write 함수는 매개변수 1 필드에 매개변수 2의 값을 쓰는 것을 의미합니다. 여기서 설명은 CreateOutputWriter(ConsolePal.OpenStandardOutput())에서 반환된 값을 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의 두 번째 매개변수는 문자열 쓰기를 의미하는 FileAccess.Write입니다. 그런 다음 이 스트림을 캡슐화하여 반환하고 Volatile.Write를 통해 터미널 스트림에 쓰고 인쇄합니다.

실제로 프로세스는 대략 다음과 같습니다.

으아악

위 내용은 .NET9 Linux-x64에서 Console.WriteLine의 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 mryunwei.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제