庫函數 與 系統調用 的區別聯繫程序員
一,概念函數
系統調用(英語:system call),指運行在用戶空間的應用程序向操做系統內核請求某些服務的調用過程。 系統調用提供了用戶程序與操做系統之間的接口。通常來講,系統調用都在內核態執行。因爲系統調用不考慮平臺差別性,由內核直接提供,於是移植性較差(幾乎無移植性)。spa
庫函數(library function),是由用戶或組織本身開發的,具備必定功能的函數集合,通常具備較好平臺移植性,經過庫文件(靜態庫或動態庫)向程序員提供功能性調用。程序員無需關心平臺差別,由庫來屏蔽平臺差別性。操作系統
二,區別接口
※函數庫調用 VS 系統調用進程
函數庫調用ip |
系統調用ci |
平臺移植性好資源 |
依賴於內核,不保證移植性開發 |
調用函數庫中的一段程序(或函數) |
調用系統內核的服務 |
一個普通功能函數的調用 |
是操做系統的一個入口點 |
在用戶空間執行 |
在內核空間執行 |
它的運行時間屬於「用戶時間」 |
它的運行時間屬於「系統」時間 |
屬於過程調用,調用開銷較小 |
在用戶空間和內核上下文環境間切換,開銷較大 |
庫函數數量較多 |
UNIX中大約有90個系統調用,較少 |
典型的C函數庫調用:printf scanf malloc |
典型的系統調用:fork open write |
三,聯繫
通常而言,跟內核功能與操做系統特性緊密相關的服務,由系統調用提供;
具備共通特性的功能通常須要較好的平臺移植性,故而由庫函數提供。
庫函數與系統調用在功能上相互補充,如進程間通訊資源的管理,進程控制等功能與平臺特性和內核息息相關,必須由系統調用來實現。
文件 I/O操做等各平臺都具備的共通功能通常採用庫函數,也便於跨平臺移植。
某些狀況下,庫函數與系統調用也有交集,
如 庫函數中的I/O操做的內部實現依然須要調用系統的I/O方能實現。