通过C程序编写文件

时间:2012-02-03 07:35:19

标签: linux

当我们在C(Ubuntu平台和gcc编译器)中使用fopen()打开文件并写入它时,内容是直接写入文件所在的硬盘地址还是首先进入主内存? 什么是通过Linux中的C程序从硬盘中的位置写入或读取文件的实际过程。

2 个答案:

答案 0 :(得分:2)

C库不会实际写入磁盘。这是操作系统的工作。 C库将对内核进行系统调用以将其写入磁盘。它甚至可以实现缓冲区以最小化系统调用的数量。并且内核还实现缓冲区以优化对磁盘的实际写入。一般来说,当你使用C时,你并不认为这个级别太低。但是,您需要确保已正确关闭文件。实际的磁盘管理是OS的工作。

Maurice J. Bach的

The Design of the UNIX Operating System包含了对Unix内核的精彩解释。你可能会把目光看作一个开始。

答案 1 :(得分:1)

在类UNIX系统中,通常在将信息写入磁盘上的文件时有两级缓存。

第一个是在C运行时库中,它可能是缓冲的(除非你以某种方式关闭缓冲)。您可以使用fflush之类的C调用来刷新这些缓冲区。

第二个是在写入物理磁盘之前保持缓冲区的操作系统级别。对fsync的调用可以强制将这些缓冲区刷新到磁盘。