Атомарная замена 'файлов', Аноним, 16-Дек-24, 06:07 [смотреть все]... по-видимому невозможна в Linux.Требования: транзакционность. Два разрешённых состояния: * есть оригинальный файл, нет замены нигде * есть замена в нужном месте, оригинального файла нет Два запрещённых: * есть оригинальный файл, замена насрана где-то * нет ни оригинала, ни замены Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2(..., RENAME_EXCHANGE), но файлы в /proc/self/fd - это симлинки, и renameat2 в них не умеет. Можно, конечно, попробовать поиграться с readlink, но он вам выдаст несуществующий путь. Hardlink - не умеет заменять файлы, флаг AT_REPLACE так и не был добавлен. Директория/симлинк: вы не можете ни создать их с заменой, ни создать их файлы через open с флагом O_TMPFILE, и потом тип поменять. Сами же вызовы для их создания флаги не поддерживают. Складывается впечатление, что так сделано намеренно, чтобы с race conditions дел не иметь.
|
- Атомарная замена 'файлов', Аноним, 11:59 , 17-Дек-24 (1)
Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному имени на другой. Для любых разумных применений этого хватает. Проблемы только у гениев, которым хочется в ту же самую айноду резко положить другое содержимое. Где у вас есть такие возможности, там и процветайте, собственно.
- Атомарная замена 'файлов', pavel_simple., 12:51 , 17-Дек-24 (2)
> Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному > имени на другой. Для любых разумных применений этого хватает. Проблемы только > у гениев, которым хочется в ту же самую айноду резко положить > другое содержимое. Где у вас есть такие возможности, там и процветайте, > собственно.Вася хочет, не файл заменить атомарно(для чего нужные сисколы есть), а заменить для работающего процесса открытый файл. Ну, я так понял, но этот поток бреда сложно однозначно понять
- Атомарная замена 'файлов', DeerFriend, 18:02 , 17-Дек-24 (3)
>> Какой-то бред ламерский. Хардлинк позволяет предельно атомарно заменить файл по указанному >> имени на другой. Для любых разумных применений этого хватает. Проблемы только >> у гениев, которым хочется в ту же самую айноду резко положить >> другое содержимое. Где у вас есть такие возможности, там и процветайте, >> собственно. > Вася хочет, не файл заменить атомарно(для чего нужные сисколы есть), а заменить > для работающего процесса открытый файл. Ну, я так понял, но этот > поток бреда сложно однозначно понять только не рассказывайте ему про sighup
- Атомарная замена 'файлов', Аноним, 09:44 , 18-Дек-24 (5)
> только не рассказывайте ему про sighup но тебе-то можно рассказать, что sighup без соответствующего обработчика не работает?
- Атомарная замена 'файлов', ACCA, 21:35 , 17-Дек-24 (4)
Конечно невозможно. Такое только в однозадачных системах бывает. "Замена насрана" может быть в памяти другого процесса.
- Атомарная замена 'файлов', Tron is Whistling, 12:08 , 25-Дек-24 (8)
"Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2"Это уже нарушение второй группы условий (одновременно насрана замена и есть оригинал). Вердикт - кривые входные условия, транзакционности нескольких операций в ФС действительно нет.
|