我知道read
是系統調用。但是當我讀到man 2 and man 3
的閱讀它給我看不同的解釋。所以,我懷疑read
有庫函數和系統調用。在這種情況下,如果我在我的c程序中使用read
,編譯器是否會考慮將其讀爲library
函數或system call
請在此混淆中解釋我。C編譯器如何決定是否調用庫函數或系統調用
0
A
回答
6
它沒有。系統調用存在於libc(C標準庫)中,就像庫函數一樣。系統調用在libc中的實現只是「存根」,它調用特定於系統的方法調用到內核中。
2
我假設你在Linux上。在該平臺上,手冊頁read(2)
描述了Linux系統調用,而如果您安裝了POSIX手冊頁,則read(3)
描述了POSIX規範read
。後者在類別3
中,因爲POSIX沒有指定系統調用和庫函數之間的區別。
libc中只有一個read
,這是系統調用的一個薄薄的包裝。
相關問題
- 1. 如何通過庫調用C編譯器而不是通過系統調用?
- 2. C++編譯器如何決定調用哪些函數?
- 3. 編譯器如何決定何時使用vPtr調用函數
- 4. 編譯器是否決定何時內聯函數(使用C++)?
- 5. 在C庫函數中調用系統
- 6. 編譯器如何知道您使用的函數是系統調用?
- 7. 編譯器如何決定調用哪個函數?
- 8. C++編譯器函數調用
- 9. 爲strcpy或strcat C++函數調用哪個系統調用?
- 10. Mutex是否會調用系統調用?
- 11. 系統()函數不從LD_PRELOAD'ed庫調用
- 12. 如何編譯C文件與系統調用
- 13. 如何促進Ocaml庫與C函數調用的OCamljava編譯?
- 14. 系統調用vs函數調用
- 15. 調用用g ++編譯的庫的C/C++函數,用gcc編譯的程序
- 16. 系統調用庫
- 17. 是否有任何Android函數調用只能進行一個或兩個特定的系統調用?
- 18. 如何用C語言重寫一個函數(系統調用)?
- 19. 調用C「系統」 ++
- 20. C++編譯器是否做出了關於內聯lambda函數及其調用者的獨立決定?
- 21. 用C編譯系統
- 22. 編譯方式停止使用某些C系統調用
- 23. 主流C++編譯器(VC++,g ++)是否將調用移除到空的構造函數或函數?
- 24. 使用系統函數編譯文件
- 25. 當系統名稱空間中的函數被調用時,c sharp編譯器如何工作?
- 26. c#編譯器是否決定自己使用stackalloc?
- 27. 從系統調用用C
- 28. 系統()調用用C
- 29. C編程 - Stat系統調用 - 錯誤
- 30. 如何使用'armcc'編譯器來跟蹤函數調用?