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庫和系統呼叫
linux系統呼叫這部分經常出現兩個詞 libc庫和封裝函式,不知道你是否清楚它們的含義?libc 1.libc概念 libc是stantard c library的簡稱,它是符合ansi c標準的乙個標準函式庫。libc庫提供c語言中所使用的巨集,型別的定義,字串操作符,數學計算函式以及輸入輸出函...
glibc和libc的區別
glibc和libc都是 linux 下的c函式庫,那麼到底有什麼區別呢?見到linux下好多的庫函式,曾經令我困惑,其實他們是有章可循的。libc是linux下的ansi c的函式庫 glibc是linux下的gun c函式庫 ansi c和gnu c有什麼區別呢?ansi c是基本的c語言函式庫...
Linux系統glibc庫版本資訊檢視
以下內容參考自 1.centos lib i386 linux gnu libc.so.6 或rpm qi glibc 或ls l lib libc.so.6 2.ubuntu ls l lib i386 linux gnu libc.so.6 32bit ls l lib x86 64 linux...