假设我们有一个已经存在的文件,比如说<File>
. 此文件已由 C 程序打开以进行更新 ( r+b
)。我们使用fseek
导航到内部的一个点<File>
,而不是它的末尾。现在我们开始使用fwrite/fputc
. 请注意,我们不会删除以前存在于<File>
...中的任何数据
系统如何处理这些写入?它是否将整个文件重写到磁盘中的另一个位置,现在包含新数据?它是否将文件分段并仅将新数据写入另一个位置(记住中间有一些可用空间)?它实际上是否仅覆盖已更改的部分?
有一个很好的理由问:在第一种情况下,如果您不断更新文件,系统可能会变慢。在第二种情况下,它可能会更快,但如果对许多文件执行,它会弄乱文件系统。在第三种情况下,特别是如果您有固态磁盘,一遍又一遍地更新文件的同一位置可能会使磁盘的该部分无用。
实际上,这就是我的问题的来源。我已经读过,为了避免过度使用磁盘扇区,固态磁盘使用不同的技术将数据移动到使用较少的扇区。但是这些stdio
函数究竟是如何处理这种情况的呢?
在此先感谢您的时间!:D