| 維度 | 系統調用 | 庫函數 |
|---|---|---|
| 運行空間 | 內核態 | 用戶態 |
| 提供者 | 操作系統內核 | C 標準庫(如 glibc) |
| 典型場景 | 硬件資源訪問、進程管理、文件 I/O 底層操作 | 字符串處理、數學計算、格式化 I/O 封裝 |
| 調用開銷 | 上下文切換開銷大 | 函數調用開銷小 |
| 可移植性 | 平台相關 | ANSI C 標準庫高度可移植 |
大多數 I/O 相關庫函數最終通過系統調用實現。以 printf 為例:
printf("hello");
實際執行流程:
printf 格式化字符串write(1, "hello", 5) 輸出到標準輸出驗證方法:
gcc -Wall -o hello hello.c
strace ./hello
strace 輸出中可見 write(1, "hello", 5) 系統調用。
fwrite)效率更高,減少系統調用次數write)避免緩衝區拷貝,效率更優系統調用涉及用戶態→內核態切換,包含寄存器保存、權限檢查等上下文切換開銷。
delete 行為)man 2(系統調用)與 man 3(庫函數)的區別