libc庫和系統呼叫

2021-10-03 07:56:19 字數 989 閱讀 3779

linux系統呼叫這部分經常出現兩個詞:libc庫和封裝函式,不知道你是否清楚它們的含義?

libc

1. libc概念

libc是stantard c library的簡稱,它是符合ansi c標準的乙個標準函式庫。libc庫提供c語言中所使用的巨集,型別的定義,字串操作符,數學計算函式以及輸入輸出函式等。正如ansi c是c語言的標準一樣,libc只是乙個函式庫標準,每個作業系統都會按照該標準對標準庫進行具體實現。通常我們所說的libc是特指某個作業系統的標準庫,比如:在linux作業系統下所說的libc即glibc。glibc是類unix作業系統中使用最廣泛的libc庫,它的全稱是gnu c library.

2. glibc 

類unix作業系統通常將libc庫作為作業系統的一部分,它被視為作業系統與使用者程式的介面。libc庫不僅實現標準c語言中的函式,而且也包含自己所屬的函式介面。比如:在glibc庫中,既包含標準c中的fopen(),又包含類unix系統中的open()。在類unix作業系統中,如果缺失了標準庫,那麼整個作業系統將不能正常運轉。

3. window下的libc   

與類unix作業系統不同的是,windows系統並不將libc庫作為整個核心作業系統的一部分。通常,每個編譯器都附屬自己的libc庫,這些libc既可以靜態編譯到程式中,又可以動態編譯到程式中。也就是說,應用程式依賴編譯器而不是作業系統。

封裝函式

中的引數複製到相應的暫存器中,然後引發乙個異常,從而系統進入核心區執行sys_open(),最後當系統呼叫執行完畢後,封裝例程還要將錯誤碼返回到應用程式中。

需要注意的是,函式庫中的api和系統呼叫並沒有一一對應的關係。應用程式借助系統呼叫可以獲得核心所提供的服務,但是,像字串操作這樣的函式並不需要借助核心來實現,因此也就不必與某個系統呼叫關聯。

不過,我們並不是必須通過封裝例程才能使用系統呼叫,syscall()和syscallx()兩個函式可以直接呼叫系統呼叫。具體的使用方法man手冊中已經說明的很清楚了。

來自武特的博文:

libc庫 glibc庫和系統呼叫

linux系統呼叫這部分經常出現兩個詞 libc庫和封裝函式,不知道你是否清楚它們的含義?libc 1.libc概念 libc是stantard c library的簡稱,它是符合ansi c標準的乙個標準函式庫。libc庫提供c語言中所使用的巨集,型別的定義,字串操作符,數學計算函式以及輸入輸出函...

ANSI C和GUN C函式庫libc和glibc

glibc和libc都是linux下的c函式庫,libc是linux下的ansi c的函式庫 glibc是linux下的gun c的函式庫 ansi c和gnu c有什麼區別呢?ansi c是基本的c語言函式庫,包含了c語言最基本的庫函式。這個庫可以根據 標頭檔案劃分為 15 個部分,其中包括 包含...

庫呼叫,系統呼叫

通過這個問題,可以判斷候選人是否具有豐富的程式設計經驗以及是否具有找出這類問題答案的敏銳感覺。簡明的回答是 函式庫呼叫是語言或應用程式的一部分,而系統呼叫是作業系統 的一部分。你要確保弄懂 trap 自陷 這個關鍵字的含義。系統呼叫是在作業系統核心發現乙個 trap 或中斷後進行的。函式庫呼叫 vs...