關於c程序的執行,我知道編譯器會將代碼轉換爲機器語言,然後執行。但是我想知道哪些服務是由操作系統提供以完成該操作。說iam使用fopen函數,請解釋我如何操作系統處理它,即。從硬盤讀取文件以加載到內存中等等。對於所有這些操作,哪些系統調用在內部調用?顯式函數如fopen,printf如何轉換爲系統調用? 如果可以在c編程環境中查看內部系統調用,請讓我知道要查看它們的路徑?哪些服務由操作系統提供以執行C程序
1
A
回答
1
語言通常有自己的API作爲其運行時支持的一部分(例如C的標準庫中的fopen()
)。這些是語言的一部分,並不完全是操作系統本身的一部分。
該語言的運行時使用操作系統的低層API。例如,fopen()
可能使用內核API的open()
函數(Linux);但它可能是一個DLL中的函數,而不是內核中的任何東西(Windows)。在某些情況下,它不是那樣的,更像是一個發送到不同進程的消息(微內核通用)。它可能會找到某種「虛擬文件系統」層的方式,並且取決於它是否在VFS的緩存中,它可能會或可能不會從那裏轉發到負責處理文件系統的代碼,該文件系統可能會或可能不會將其轉發給某種存儲設備驅動程序(例如USB閃存設備驅動程序),然後又可能將其轉發給其他設備驅動程序(例如USB控制器驅動程序)。
大多數情況下,它對於不同的操作系統可能會有很大的不同,所以沒有一個答案對所有操作系統都是正確的。
相關問題
- 1. 通過操作系統執行程序
- 2. 程序是由操作系統還是IDE執行?
- 3. LSP(分層服務提供商)操作系統兼容性
- 4. 我可以爲我的WCF服務提供哪些操作合同?
- 5. OpenCV支持哪些Android操作系統?
- 6. 操作系統提供的抽象
- 7. 如何知道應用程序提供了哪些服務?
- 8. 憑證提供程序和系統服務之間的IPC
- 9. 操作系統提供程序是否爲Docker製作特殊/定製操作系統?
- 10. 單程序操作系統
- 11. 你可以使用C++中的bool和int操作符執行哪些操作?
- 12. module.config中提供了哪些提供者/服務?
- 13. 如何在64位操作系統上執行彙編程序?
- 14. 網站的哪些功能可以取決於操作系統?
- 15. 選擇操作系統服務滑軌應用程序
- 16. 強制操作系統在「子程序」之後執行清理操作
- 17. 操作系統多線程有哪些困難?
- 18. 對操作系統的服務
- 19. 操作系統是Windows服務器?
- 20. C++/clrIntelliSense:沒有操作符「+」匹配這些操作數。系統:雙^ +系統:雙^
- 21. 在Capistrano 2.5.19上部署Rails 3應用程序時,應該在共享/系統中執行哪些操作?
- 22. 如何在xv6操作系統中運行c程序
- 23. 多操作系統與SIngle操作系統電話和服務器開發
- 24. 從頭開始創建操作系統需要哪些技能,程序等?
- 25. 我們如何爲64位操作系統設置oledb提供程序
- 26. 如何檢查應用程序是否隨操作系統一起提供?
- 27. 這些不同的Android操作系統可以安裝在哪些設備上?
- 28. 修改代碼以在遠程服務器上執行操作
- 29. 如何在操作系統多任務執行?
- 30. C程序對CPU和操作系統的依賴關係
函數(而不是函數**調用**)不會轉換爲系統調用。函數只是函數和函數調用,通常轉換爲正常的「CALL」指令。被調用的低級函數反過來可以在彙編中實現,由此編寫e的程序員。 G。 'fopen()'會使用系統調用來讓操作系統把他交給一個打開的文件句柄等。 – 2014-10-18 09:26:37
通常'fopen'函數將在一個庫中,這個函數或者與編譯器捆綁在一起,或者被設計爲與特定編譯器;該函數最終將調用一個操作系統函數(例如Windows中的CreateFile)。操作系統從這一點開始做所有事情。 – 2014-10-18 09:26:46
請你參考上面的代碼詳細解釋我嗎? – 2014-10-18 09:36:17