自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

常用Console.WriteLine原理,你知道嗎?

開發(fā) 前端
有沒有好奇過,它是如何通過從托管到非托管把字符串打印輸出到屏幕上的呢?本篇來看下,原理呢其實非常簡單,通過CLR一系列的調用System.Console.dll里面的托管函數(shù)之后,最后會調用微軟原生的Windows動態(tài)鏈接庫kernel32.dll里面的函數(shù)WriteFile。

.NET里面如果有一個函數(shù)調用最多,那么莫過于Console.WriteLine了。它無處不在,基本上是.NET初學者入門的第一個函數(shù)調用,比如打印出那個著名的Hello World字符串。

static void Main(string[] args)
{
    Console.WriteLine("Hello World");
}

有沒有好奇過,它是如何通過從托管到非托管把字符串打印輸出到屏幕上的呢?本篇來看下,原理呢其實非常簡單,通過CLR一系列的調用System.Console.dll里面的托管函數(shù)之后,最后會調用微軟原生的Windows動態(tài)鏈接庫kernel32.dll里面的函數(shù)WriteFile。

WriteFile頭文件在fileapi.h,它的作用是將數(shù)據(jù)寫入指定的文件或輸入/輸出 (I/O) 設備,原型如下:

BOOL WriteFile(
  [in]                HANDLE       hFile,
  [in]                LPCVOID      lpBuffer,
  [in]                DWORD        nNumberOfBytesToWrite,
  [out, optional]     LPDWORD      lpNumberOfBytesWritten,
  [in, out, optional] LPOVERLAPPED lpOverlapped
);

返回值bool類型標識了,寫入成功或者失敗。

那么這個Console.WriteLine調用如下:

WriteLine(托管)-》
g__EnsureInitialized(托管)-》
GetStandardFile(托管)-》
ConsoleHandleIsWritable(托管)-》
WriteFile(非托管)

再引申下,Console.ReadLine呢?它跟Console.WriteLine是一樣的,不過它最后調用的是ReadFile函數(shù)了,從指定的文件或輸入/輸出 (I/O) 設備讀取數(shù)據(jù)。讀取發(fā)生在文件指針指定的位置。

責任編輯:武曉燕 來源: 江湖評談
相關推薦

2024-02-22 16:58:56

.NET9LinuxConsole

2020-12-24 15:26:07

Redis數(shù)據(jù)庫

2023-06-08 08:06:07

error錯誤頁原理

2021-09-13 19:28:42

JavaNetty開發(fā)

2020-11-26 07:48:24

Shell 腳本內置

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2023-12-12 08:41:01

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-04-26 10:21:04

2018-09-07 15:23:16

2024-06-12 08:05:06

2024-11-01 10:48:01

C#WPF程序

2021-10-14 06:52:47

算法校驗碼結構

2022-11-04 14:16:05

2024-09-18 07:00:00

消息隊列中間件消息隊列

2025-02-18 08:11:17

2023-03-21 07:39:51

CentOS掛載硬盤

2022-12-02 14:12:52

新能源汽車海爾
點贊
收藏

51CTO技術棧公眾號