博客專欄

EEPW首頁 > 博客 > 嵌入式Linux:Linux庫函數(shù)

嵌入式Linux:Linux庫函數(shù)

發(fā)布人:美男子玩編程 時間:2024-04-26 來源:工程師 發(fā)布文章

1


Linux庫函數(shù)簡介

Linux 提供了豐富的庫函數(shù),涵蓋了各種領(lǐng)域,從文件操作到網(wǎng)絡(luò)編程、圖形界面、數(shù)學(xué)運(yùn)算等。這些庫函數(shù)大多數(shù)都是標(biāo)準(zhǔn)的 C 庫函數(shù),同時也包括一些特定于 Linux 系統(tǒng)的庫。


Linux庫函數(shù)通常以動態(tài)庫文件(.so)的形式提供,存放在根文件系統(tǒng)的 /lib 目錄下。


Linux庫函數(shù)構(gòu)建于系統(tǒng)調(diào)用之上,盡管有些庫函數(shù)并不調(diào)用系統(tǒng)調(diào)用。例如,一些字符串處理函數(shù)(strlen()、strcat()、memcpy()、memset()、strchr() 等)。


圖片


但是,其他庫函數(shù)可能會使用系統(tǒng)調(diào)用來完成實際的操作,例如 fopen 內(nèi)部調(diào)用了系統(tǒng)調(diào)用 open() 來打開文件,fread() 利用了系統(tǒng)調(diào)用 read() 來讀取文件,fwrite() 則使用了系統(tǒng)調(diào)用 write() 來寫文件。


圖片


Linux 內(nèi)核提供了一系列系統(tǒng)調(diào)用供應(yīng)用層使用,直接使用系統(tǒng)調(diào)用是一種方法。然而,有些系統(tǒng)調(diào)用使用起來不夠方便,因此引入了 C 語言庫。這些庫函數(shù)的設(shè)計旨在提供比底層系統(tǒng)調(diào)用更方便、更易用、更具可移植性的調(diào)用接口。它們之間的區(qū)別如下:

  • 庫函數(shù)屬于應(yīng)用層,而系統(tǒng)調(diào)用是內(nèi)核提供給應(yīng)用層的編程接口,屬于系統(tǒng)內(nèi)核的一部分。

  • 庫函數(shù)運(yùn)行在用戶空間,而調(diào)用系統(tǒng)調(diào)用會導(dǎo)致從用戶空間(用戶態(tài))陷入到內(nèi)核空間(內(nèi)核態(tài))。

  • 庫函數(shù)通常具有緩存,而系統(tǒng)調(diào)用是無緩存的,因此在性能和效率上,庫函數(shù)通常優(yōu)于系統(tǒng)調(diào)用。

  • 可移植性方面,庫函數(shù)相對于系統(tǒng)調(diào)用具有更好的可移植性。由于不同操作系統(tǒng)的系統(tǒng)調(diào)用定義、功能、參數(shù)列表、返回值等通常不同,C 語言庫函數(shù)在不同操作系統(tǒng)之間的接口定義幾乎相同,因此具有更好的可移植性。


盡管從實現(xiàn)者的角度來看,系統(tǒng)調(diào)用與庫函數(shù)存在根本的區(qū)別,但從用戶使用的角度來看,這些區(qū)別并不重要。對于應(yīng)用編程者來說,它們都是 C 語言函數(shù)。在實際應(yīng)用編程中,庫函數(shù)和系統(tǒng)調(diào)用都會被使用。因此,從用戶的角度來看,將它們視為 C 函數(shù)即可,無需過分區(qū)分它們之間的差異。


2


標(biāo)準(zhǔn)C語言庫函數(shù)

在Linux系統(tǒng)下,使用的C語言庫主要是GNU C語言函數(shù)庫,也被稱為glibc。它是Linux下的標(biāo)準(zhǔn)C語言函數(shù)庫,為開發(fā)者提供了豐富的函數(shù)集,涵蓋了輸入輸出、字符串處理、數(shù)學(xué)運(yùn)算、文件操作等多個領(lǐng)域。


圖片


網(wǎng)站:https://sourceware.org/glibc/


glibc 源碼的獲取方式很簡單,直接直接從 git 倉庫下載,也可以通過 ftp 下載:


圖片


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式 Linux

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉