У меня есть программа, которая принимает файл, сжимает его, используя /usr/bin/zip
или /bin/gzip
или /bin/bzip2
, и удаляет оригинал, если и только если операция сжатия завершается успешно.
Однако этоПрограмма может быть убита (через kill -9
), или, в принципе, может даже аварийно завершить свою работу!
Вопрос: Можно ли предположить, что сжатый выходной файл создается на дискевсегда действителен, даже не распаковывая его и не сравнивая с оригиналом?
Другими словами , независимо от того, в какой точке операция сжатия будет грациозно прервана, разве факт, чтосжатый выходной файл существует на диске, подразумевается, что он действителен?
Другими словами , является ли операция сжатия и создание файла на диске вместе атомарной транзакцией?
Основная проблемаздесь не удаляется исходный файл, если сжатый файл недействителен, но без необходимости выполнять дорогостоящие операции распаковки и сравнения.
Неe:
Игнорировать файловые буферы ОС, не сбрасываемые на диск из-за сбоя ИБП.
Игнорировать сбой диска / носителя.В любом случае это может произойти намного позже и совершенно независимо от прерывания программы.