Если я проверю, есть ли у меня права доступа к файлу, например, java.io.File#canRead()
, и после этого создаю FileOutputStream
, то (насколько я знаю) возможно, что другой процесс (например, chmod
или mv
) ) изменяет права доступа или переименовывает файл, удаляет его или переключает его с другим файлом.
Например, я хочу записать что-либо в файл, только если он исполняемый.
В C, такие условия гонки можно предотвратить с помощью FileDescriptor
.
В Java есть класс java.io.FileDescriptor
, но, похоже, этот класс предназначен только для синхронизации буферов и создания потоков, и я бы нужен File*Stream
, чтобы получить FileDescriptor
.
Как можно предотвратить это состояние гонки, например, с помощью FileDescriptor
или другого механизма?
Или защищено File
против этого каким-то образом?