gpt4 book ai didi

c - fwite/putc 是如何写入磁盘的?

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:57 24 4
gpt4 key购买 nike

假设我们有一个已经存在的文件,比如说 <File> .此文件已由 C 程序打开以进行更新 (r+b)。我们使用 fseek导航到 <File> 内的某个点,除了它的结尾。现在我们开始使用 fwrite/fputc 写入数据.请注意,我们不会删除以前存在于 <File> 中的任何数据。 ...

系统如何处理这些写入?它是否将整个文件重写到磁盘中的另一个位置,现在包含新数据?它是否将文件分段并只将新数据写入另一个位置(记住中间有一些空闲空间)?它实际上是否只覆盖已更改的部分

问这个问题是有充分理由的:在第一种情况下,如果不断更新文件,系统会变慢。在第二种情况下,它可能会更快,但如果对许多文件执行此操作会弄乱文件系统。在第三种情况下,尤其是如果您有固态磁盘,一遍又一遍地更新文件的同一位置可能会使磁盘的那部分变得无用。

实际上,这就是我的问题的来源。我读过,为了避免过度使用磁盘扇区,固态磁盘使用不同的技术将数据移动到较少使用的扇区。但是 stdio 到底是怎么做到的?函数处理这种情况?

提前感谢您的宝贵时间! :D

最佳答案

文件系统处理程序创建一种写入磁盘扇区的字典,因此当您更新文件内容时,文件系统会查找磁盘上的字典,字典告诉它文件在磁盘的哪个扇区数据位于。然后它旋转(或等到光盘到达那里)并更新光盘上的相应扇区。

这是简短的版本。

因此,万一更新文件,文件通常不会移动到新位置。当您将新数据写入文件并追加到文件中时,如果数据不适合现有扇区,则会分配额外的扇区并将数据写入那里。

如果您删除了一个文件,那么这些扇区通常会被标记为空闲并被重新使用。因此,只有当您打开一个新文件并重写它时,才会出现该文件被放入与之前不同的扇区的情况。

但细节可能会有所不同,具体取决于硬件。 AFAIK 如果您覆盖 CD 上的数据,那么数据是新写入的(只要 session 未完成),因为一旦写入 CD 上的数据就无法更新。

关于c - fwite/putc 是如何写入磁盘的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com