linux中c庫函式和系統呼叫的區別是什麼呢?

時間 2021-06-03 09:47:27

1樓:徐聖

簡單的說c庫函式是為了方便使用者程式設計以及使用OS,對系統呼叫的封裝和擴充套件。

封裝體現在使用系統功能介面更友好,更方便。直接調系統呼叫API,你會發現引數較多,各種返回異常需要自己處理。C庫一定程度上幫你做了這個工作。

擴充套件體現在系統呼叫沒有的功能,c庫幫你擴充了。比如string庫很多函式strlen,mencpy,strcpy,strcmp等等是不需要在核心態完成的,使用者態就能夠完成,因此也不要對應的系統呼叫。

打個比方:boss,秘書和員工。員工問問題給秘書,秘書能做的直接答覆你,不再上公升到boss。

不能答覆的,她要請求boss,boss的答覆經過秘書處理轉給你。當然你也可以直接請求boss,但是直接對接比較麻煩不是,搞不好,boss懟你一臉。其中boss是系統呼叫,秘書是c庫,程式設計人員是員工。

就是這個層次關係了。

2樓:

摘自Robert Love,Linux Kernel Development, 3rd Edition.Addison-Wesley Professional

非正式翻譯:

通常,應用程式是針對API在使用者空間裡實現的,而不是直接針對系統呼叫實現的。這很重要,因為在應用程式使用的介面和核心實際提供的介面之間不必存在直接關聯。乙個API定義了應用程式使用的一系列的程式設計介面。

那些介面可以用系統呼叫實現,也可以用多個系統呼叫實現,還可以完全不使用系統呼叫實現。同樣的API可以存在與很多系統上,向應用程式提供相同的介面。而這些API的在不同的系統上的具體實現可以是完全不同的。

圖5.1給出了POSIX API,C語言庫,系統呼叫這三者的關係。

Linux 中如何快速檢視 C 庫函式的標頭檔案以及相應的函式資訊?

蒲公英 自從看了 Unix Linux程式設計實踐教程 五星推薦這本書 檢視標頭檔案和函式資訊非常方便。man k keyword grep name 查詢乙個man手冊中的簡短說明包含keyword的函式,name為函式名的關鍵字 可以不加管道 如man k timer grep set 查詢乙個...

Windows系統呼叫的A函式和W函式的關係?

回答個詳細的 與Event相關並且會造成程序控制代碼數量增加的Windows API有兩個 CreateEvent和OpenEvent。再考慮深入一點,區分一下Unicode和Ansi版本的API就得到了四個相關函式CreateEventA,CreateEventW,OpenEventA,OpenE...

Linux 中 write 系統呼叫具有原子性嗎?比如兩個程序同時 write 同乙個檔案會不會出現資料交錯的情況?標準裡面有規定嗎?

木匠劈柴 兩個程序 執行緒同時write同乙個檔案要分兩種情況,一是 檔案 被共享,二是不被共享。首先澄清一下概念,這裡的 檔案 指的是Linux 核心 in memory 檔案表 file table 裡的乙個檔案物件,即 file description。第一種情況,會在dup或者fork時發生...