Чего не хватает всем нашим ОС

Apr 26, 2022 00:29


Режима доступа к файлам «Transact-rewrite». Это, по-моему, не должно бросить тень ни на одну из существующих прикладных программ.

Я уже упоминал один из законов роботехники для компьютерных программ: пользовательские данные бесценны. Вопросы начинаются, когда мы перезаписываем пользовательский файл. Если мы его перезаписываем в обычном режиме «rewrite» (Си «w», Windows CREATE_ALWAYS) и случается что-то нехорошее (да хоть нехватка места на диске), файл теряется. От потери его защищают три вещи: пользовательские данные обычно невелики, диски бездонны, а на новых языках программирования программы реже «падают».

Ну очень перестраховывающиеся программисты используют такое: создают новый файл, сохраняют туда, а потом переименовывают. Есть два возражения: интернет-диски вроде Google Drive могут захватить файл и помешать переименованию, и теряются права доступа к файлу, что важно в корпоративной среде. Мой режим решает то и другое.

При создании файла открывается альтернативный временный поток, и туда пишутся все данные. Как только даётся команда CommitFile (или как она будет в WinAPI), происходит подмена потоков - временный поток превратился в постоянный. Если файл закроется по любой причине, а commit’а не последует, поток исчезает без следа.

Режим Transact-rewrite нужен только для пользовательских документов и только при записи файла с нуля. Результаты загрузок и компиляций открываются по старинке - если что-то заглючило, файл потерян. Файл для дописывания в таком режиме открыть нельзя - только создать с нуля.

Если диск не поддерживает транзактного доступа, файл по старинке перезаписывается. Программа может специальной функцией проверить, есть ли подобный доступ, и если его нет - попытаться сымитировать.

Доступ других программ для записи невозможен. Для чтения - да, программа будет читать основной поток. И вообще, если программа согласилась читать файл, куда пишут, она должна понимать, что файл не отлит в бронзе и вдруг может измениться.

мысли

Previous post Next post
Up