前言
這是一對非常容易混淆的概念。對于用戶( 應用程序開發者 )來說,并不一定要嚴格區分其意義。因為在用戶看來,它們都是以C函數的形式出現的。但了解二者的區別對我們掌握整個計算機系統有很大幫助。
區別
1. 一部分庫函數實現需要使用系統調用( 如 printf 庫函數需要調用 write 系統調用 )
2. 另一部分庫函數實現不需要使用系統調用( 如strcpy 庫函數不需要使用系統調用因為它不需要使用CPU特權指令 )
3. 系統調用一定在內核空間執行,而庫函數只有其中的系統調用部分執行時才會陷入內核( 如果該庫函數使用了系統調用的話 )
4. 系統調用往往提供的是需要使用CPU特權指令的最核心的服務,而一部分庫函數則是搭建在系統調用之上更滿足于具體應用的函數( 另一部分參見2 )
?