寫作時,我們使用C(Ubuntu的平臺和gcc編譯器)fopen()函數打開一個文件,並寫入它,並在內容直接寫入到文件所在或者是第一硬盤地址帶入主內存? 通過Linux中的C程序,文件可以從硬盤中的位置寫入或讀取的實際過程是什麼?文件到C程序
Q
文件到C程序
1
A
回答
1
在類似UNIX的系統中,通常在向磁盤上的文件寫入信息時有兩級緩存。
首先是在C運行時庫,它很可能是緩衝(除非您關閉緩存以某種方式)。您可以使用C調用如fflush
來刷新這些緩衝區。
第二個是在操作系統級別,其中緩衝器被寫入到物理磁盤之前舉行。對fsync
的調用可以強制將這些緩衝區刷新到磁盤。
2
C庫不會真正寫入磁盤。這是操作系統的工作。 C庫會對內核進行系統調用,將其寫入磁盤。它甚至可以實現一個緩衝區來減少系統調用的次數。並且內核還實施緩衝區來優化對磁盤的實際寫入。一般情況下,當你使用C時,你不會認爲這個級別太低。但是,您需要確保您已正確關閉文件。實際的磁盤管理是OS的工作。
The Design of the UNIX Operating System莫里斯J.巴赫包含Unix內核的很好的解釋。你可能會看起來像一個開始。
相關問題
- 1. C程序。文件。
- 2. 程序沒有輸出到文件? C++
- 3. C程序,找不到頭文件
- 4. 'c'文件處理程序
- 5. C++程序讀取文件
- 6. c#程序破壞文件
- 7. 多文件C程序
- 8. C程序文件複製
- 9. c + +新建文件夾程序文件
- 10. 用於將文件追加到文件結尾的C程序
- 11. 如何將彙編文件(.s文件)鏈接到C程序
- 12. 如何將C++文件鏈接到C程序?
- 13. C程序找到一個c文件的函數名稱
- 14. C程序 - 驗證從文本文件
- 15. 讀取文件到程序
- 16. 保存一個C程序輸出到一個文本文件
- 17. 程序沒有將部件打印到輸出文件中C++
- 18. 添加HTML文件到C#的電子郵件應用程序
- 19. 關於C程序中的.c文件和.h文件?
- 20. 程序文件中的文件的C++創建過程
- 21. C#應用程序導入Excel文件內容到一個文本文件
- 22. C程序到C++ B +樹
- 23. 將通過web.config文件的C#程序
- 24. 在C++程序中生成pcapng文件
- 25. 無法在c:\\程序文件(X86)
- 26. 將.txt文件讀入C程序
- 27. c程序播放音頻文件
- 28. C程序無法打開文件
- 29. C#程序不能寫入文件
- 30. 用C程序編寫頭文件?
那麼系統調用write()函數是如何執行寫入操作的,它是直接寫入硬盤還是實際進程?我懷疑內核系統調用代碼是否可以寫入直接到硬盤地址或不? – 2012-02-03 08:47:18
恐怕答案會因內核不同而不同,從磁盤到磁盤也不同,我在這個領域的專家也不多。基本思想是內核將使用內存緩衝區,即write()不會立即寫入磁盤。當內核決定寫入最佳時,該緩衝區將被刷新到磁盤。每個磁盤都與一個磁盤控制器相關聯,這個磁盤控制器甚至可以有自己的緩衝區內核,磁盤控制器嘗試優化一些東西,如減少實際寫入次數,最大限度地減少磁頭的移動等。 – taskinoor 2012-02-03 09:26:38
幾個谷歌搜索後,我發現這個:http://www.ibm.com/developerworks/linux/library/l -linux文件系統/。請仔細檢查高級體系結構部分。這可能會澄清你正在搜索的一些東西。 – taskinoor 2012-02-03 09:39:52