Предположим, у нас есть уже существующий файл, скажем <File>
. Этот файл был открыт для обновления программой C (r+b
). Мы используем fseek
для перехода к точке внутри <File>
, кроме ее конца. Теперь мы начинаем записывать данные с помощью fwrite/fputc
. Обратите внимание, что мы не удаляем данные, ранее существовавшие в _6 _...
Как система обрабатывает эти записи? Будет ли он перезаписан весь файл в другое место на диске, теперь содержащий новые данные? Он фрагментирует файл и записывает только новые данные в другую позицию (и просто помните, что посередине есть свободное место)? Действительно ли он перезаписывает на месте только ту часть, которая была изменена?
Есть веская причина спросить: в первом случае, если вы постоянно обновляете файл, система может замедлиться. Во втором случае это может быть быстрее, но испортит файловую систему, если будет выполнено с большим количеством файлов. В третьем случае, особенно если у вас есть твердотельный диск, обновление одного и того же участка файла снова и снова может сделать эту часть диска бесполезной.
Собственно, отсюда и мой вопрос. Я читал, что, чтобы спасти дисковые сектора от чрезмерного использования, твердотельные диски перемещают данные в менее используемые секторы, используя различные методы. Но как именно stdio
функции справляются с такими ситуациями?
Спасибо заранее за ваше время! : D