庫函數調用是語言或應用程序本身的一部分,而系統函數調用是內核提供給應用程序的接口,屬於系統的一部分且其是在操作系統內核發現一個“trap”或中斷後進行的(其中系統調用是軟中斷)。
庫函數 vs 系統調用
** | 前者 | 後者 |
---|---|---|
兼容性 | 在所有的ANSI C編譯器版本中,C庫函數是相同的 | 各個操作系統的系統調用是不同的 |
* | 在用戶地址空間執行 | 在內核地址空間執行 |
* | 屬於過程調用,調用開銷較小 | 需要在用戶空間和內核上下文環境間切換,開銷較大 |
規模 | 在C函數庫libc中有大約300個函數 | 在UNIX中大約有90個系統調用 |
etc. | … | … |
實例說明
Linux下對文件操作有兩種方式:系統調用(system call)和庫函數調用(Library functions)。