linux內(nèi)核中有main函數(shù),因為main函數(shù)在Linux內(nèi)核代碼的最頂端。main函數(shù)主要負責從內(nèi)核控制塊(Kernel Control Block,KCB)中獲取系統(tǒng)的環(huán)境變量,并初始化系統(tǒng)需要的模塊。main函數(shù)是程序的入口,main是應(yīng)用程序和操作系統(tǒng)之間約定好的一個接口名,所以linux中每個應(yīng)用程序的第一個函數(shù)必須是main。
本文操作環(huán)境:linux 5.18.14系統(tǒng)、DELL G3電腦。
linux內(nèi)核有main函數(shù);main函數(shù)是程序的入口,main是應(yīng)用程序和操作系統(tǒng)之間約定好的一個接口名,所以linux中每個應(yīng)用程序的第一個函數(shù)必須是main。
Linux內(nèi)核是操作系統(tǒng)的核心,它負責為系統(tǒng)執(zhí)行驅(qū)動程序、啟動任務(wù),處理錯誤以及管理內(nèi)存等所有操作系統(tǒng)底層功能。本文將介紹Linux內(nèi)核中重要的main函數(shù)。
main函數(shù)在Linux內(nèi)核代碼的最頂端。main函數(shù)主要負責從內(nèi)核控制塊(Kernel Control Block,KCB)中獲取系統(tǒng)的環(huán)境變量,并初始化系統(tǒng)需要的模塊(內(nèi)存管理、設(shè)備驅(qū)動等)。
C語言規(guī)定了main函數(shù)的參數(shù)只能有兩個,一個是argc,一個是argv并且,argc只能是整數(shù),第二個必須是指向字符串的指針數(shù)組
由于main函數(shù)不能被其它函數(shù)調(diào)用, 因此不可能在程序內(nèi)部取得實際值。那么,在何處把實參值賦予main
函數(shù)的形參呢? 實際上,main函數(shù)的參數(shù)值是從操作系統(tǒng)命令行上獲得的。當我們要運行一個可執(zhí)行文件時,
在DOS提示符下鍵入文件名,再輸入實際參數(shù)即可把這些實參傳送到main的形參中去。DOS提示符下命令行的一般形式為:
C:>可執(zhí)行文件名 參數(shù) 參數(shù)……; 但是應(yīng)該特別注意的是,main 的兩個形參和命令行中的參數(shù)在 位置上不是一一對應(yīng)的
argc: 參數(shù)表示命令行中參數(shù)的個數(shù)(注意 文本名本身也是一個參數(shù)),
rgc的值是在輸入命令行時由系統(tǒng)按實際參數(shù)的個數(shù)自動賦予的
argv :參數(shù)是字符串指針數(shù)組,其各元素值為命令行中各字符串(參數(shù)均按字符串處理)的首地址。 指針數(shù)組
的長度即為參數(shù)個數(shù)。數(shù)組元素初值由系統(tǒng)自動賦予
linux內(nèi)核源碼之main函數(shù)解析
1、main函數(shù)是C語言的入口,這句話沒錯;但是這句話僅僅是一個約定,而非一個亙古不變的鐵律!從程序的更為本質(zhì)的匯編代碼來看,只是大家約定匯編初始化完了后,跳到一個名字叫”main”的標號處;言外之意就是這個標號也是可以改名的,比如linux的C語言入口就是start_kernel();從這個標號地址后就是C語言的天下了。用main這個名字僅僅是因為大家的約定而已,不遵守約定能玩的轉(zhuǎn)也行啊,就像蘋果充電線啥的都和別人不一樣。
2、在編譯時是不存多個main函數(shù)的!每個應(yīng)用程序雖說都有一個main函數(shù)(從應(yīng)用程序來看應(yīng)用程序的入口是main函數(shù)哦);但是應(yīng)用程序都是獨立編譯的,不會一起編譯,操作系統(tǒng)內(nèi)核就更不可能和應(yīng)用程序一起編譯了!所以根本不存在多個main沖突的!!可能是統(tǒng)一操作系統(tǒng)與應(yīng)用程序之間的接口,亦或是側(cè)面影響下main是程序入口的說法,main是應(yīng)用程序和操作系統(tǒng)之間約定好的一個接口名!所以linux中每個應(yīng)用程序的第一個函數(shù)必須是main。除非你改掉了內(nèi)核調(diào)度的接口地方。
以上就是linux內(nèi)核中有main函數(shù)嗎的詳細內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!