beldmit: (Программизм)
[personal profile] beldmit
Освежил в памяти, как нынче заблокировать доступ к файлу на уровне C API.

Linux (и, видимо, прочие юниксы): flock работает всегда, lockf - для файла, открытого на запись. fcntl, наверное, тоже.

В Windows это не портируется, там надо звать Windows API, которое несовместимо в этом месте с OpenSSL BIO. И из виндового HANDLE получить дескриптор файла как-то можно, но это танцы с бубном.

На практике интересен ещё атомарный rename. В Unix-подобных системах, видимо, он действительно атомарный, попутно нашёлся эпический тред про то, как эту атомарность в MacOS 10+ чинили 3 года. В Windows есть ReplaceFile со товарищи, тоже со своими особенностями, и помеченная как deprecated функция для работы через транзакционный механизм NTFS.

Как это всё работает на NFS, не знает примерно никто.

Видимо, наиболее простое по программированию решение всех этих задач - внешнее по отношению к файловой системе, типа именованных мьютексов.

Date: 2017-08-29 09:12 pm (UTC)
elglin: (Default)
From: [personal profile] elglin
Я на нормальных языках не пишу, только скрипты; в Linux для баша использовал flock, на питоне эту задачу ни разу не решал - а вот на PowerShell проще использовать мутекс.
Честно говоря, если бы писал на голом C, то, наверное, не привязывался к файловой системе, а использовал семафор. Но я межпроцесску на сишке не писал со времен универа, так что мое мнение по рупь ведро.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 12:14 am
Powered by Dreamwidth Studios