Файлы в Redox удаляются только после закрытия всех открытых дескрипторов

02.01.2026

В файловой системе RedoxFS удаление файла теперь откладывается до закрытия всех открытых на него дескрипторов. Это соответствует POSIX для анонимных файлов и удаления при закрытии.

Что было не так

В POSIX, в Linux и в большинстве Unix-систем файл, который удалили, но который открыт где-то ещё, продолжает существовать. Место на диске освобождается сразу, но сами данные и возможность их читать через уже открытый дескриптор сохраняются до последнего закрытия.

Понятно, зачем это нужно. Программа пишет во временный файл, открывает его, отдаёт дескриптор другому процессу и удаляет имя. С исчезновением файла сразу другой процесс продолжил бы читать данные, а новое открытие по имени — получило бы ошибку, хотя имя ещё «должно» существовать. И главное — имя освобождается для повторного использования, а старые данные кто-то всё ещё читает.

В Redox удаление было немедленным. Программа, полагавшаяся на общепринятое поведение, ломалась: либо чтение из открытого дескриптора обрывалось, либо новое открытие давало файл с тем же именем и другим содержимым.

Что это даёт

Временные файлы становятся безопасными. Раньше временный файл на Redox приходилось вести с осторожностью — и код, рассчитанный на другие системы, мог вести себя неверно. Теперь распространённый приём работает как ожидается.

Отдельно: запись O_TMPFILE — анонимный файл без имени — требует именно такого поведения, и без его поддержки полноценная реализация невозможна. Это часть POSIX-соответствия, которое даёт переносимость кода.

Почему это волнует разработчика на Rust

В стандартной библиотеке Rust нет типа временного файла с гарантированным удалением — приходится писать свой или брать крейт. Такой код почти всегда опирается на поведение, которое в POSIX описано именно так: удалил файл — работай с открытым дескриптором дальше.

Есть и другая сторона: запись с флагом O_TMPFILE в Rust используется всё чаще, в том числе во временных базах данных и системах очередей, которые пишут временные файлы и полагаются на то, что их нельзя случайно подсмотреть по имени.

Оригинал

Коммит от 2 января 2026 года в репозитории redox-os/redoxfs о переносе удаления файла на момент закрытия последнего дескриптора, добавлен автором Jeremy Soller; сводка «This Month in Redox — January 2026», раздел «RedoxFS Improvements»

Упоминаний: 1 · Просмотров: 5