Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Categories:

Атомарные операции с файлами

А вот как надежно выполнить операцию замены содержимого файла атомарно? Я не парился особо: делал unlink старого файла, а потом создавал новый, но пару раз при получении FITS-файлов на 0.5-метровом телескопе обнаружил "пропажу" части данных из шапки (похоже, файл был открыт в тот момент, когда только заполнялся демоном).
В интернетах пишут, что нужно сначала создать временный файл, а затем при помощи rename подменить содержимое оригинального. Насколько это надежно? В манах пишут, что если в момент выполнения rename другой процесс обратится к файлу, "пропажи" он не заметит. А вот если он его откроет "чуть-чуть заранее" и успеет часть считать? Останется ли файл для него нетронутым, как при unlink, или же превратится в кашу, как при "перезаписи наживую"?
Tags: c, рукожопие
Subscribe

  • Выделение 4-связных компонент на изображении

    Я уже давным-давно писал об этом алгоритме, но когда понадобилось его однозначно и надежно применить, оказалось, что на некоторых тестовых…

  • А что, в С так нельзя?

    Пытаюсь передать в функцию цвет как массив. Функция такая: void Pattern_draw3(Img3 *img, Pattern *p, int xul, int yul, uint8_t colr[3]); И…

  • Ардуиноподход

    Вот как ни гляну, большинство народу для считывания данных калибровки в BMP/BME280 использует типичный ардуиноподход, как, например, здесь: зачем-то…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 16 comments

  • Выделение 4-связных компонент на изображении

    Я уже давным-давно писал об этом алгоритме, но когда понадобилось его однозначно и надежно применить, оказалось, что на некоторых тестовых…

  • А что, в С так нельзя?

    Пытаюсь передать в функцию цвет как массив. Функция такая: void Pattern_draw3(Img3 *img, Pattern *p, int xul, int yul, uint8_t colr[3]); И…

  • Ардуиноподход

    Вот как ни гляну, большинство народу для считывания данных калибровки в BMP/BME280 использует типичный ардуиноподход, как, например, здесь: зачем-то…