Zamykání souborů je v informatice mechanizmus sloužící k omezení přístupu k souboru v souborovém systému počítače tím, že povolí přístup pouze jednomu uživateli nebo procesu v určitém čase. Lze tak zabránit vzniku souběhu tím, že jednotlivé procesy přistupují k souboru postupně (jsou řazeny do fronty).
Důvod zamykání souborů lze ilustrovat na vzniku souběhu v následujícím scénáři:
Celý soubor je obvykle zamykán například při jeho úpravě uživatelem v nějakém textovém editoru. Zamykání celých souborů lze pozorovat i u databází, kde dochází k seřazení jednotlivých požadavků přistupujících k jednotlivým souborům, ve kterých je databáze uložena.
Většina operačních systémů podporuje kromě možnosti zamknutí celého souboru i koncept zamykání menších částí uvnitř jednoho souboru. Tím může soubor upravovat souběžně více procesů, což může být výhodnější než uzamčení celého souboru. Pokud jsou uvnitř souboru zamykány velké bloky, může být naopak efektivnější zamykat soubor celý.
Nevhodné použití zamykání může zhoršit výkon systému nebo způsobit deadlock.
V historii operačních systémů došlo k postupnému zavádění zamykání souborů. Proto různé operační systémy přistupují k zamykání různě.
Společnost IBM použila zamykání souboru jako první v systému OS/360 na mainframe počítačích, kde zamykání bylo označeno jako „exkluzivní přístup“.
Systém Microsoft Windows používá povinné zámky (anglicky mandatory lock), takže je-li zámek nastaven, jádro zajistí že další pokus o přístup selže. V systému jsou využívány tři rozdílné mechanismy ke kontrole přístupu sdílených souborů:
V unixových systémech (tj. i distribucích Linuxu a Apple OS X) běžně nedochází k automatickému zamčení otevřených souborů nebo běžících programů. Z důvodů zpětné kompatibility a z historických důvodů jsou v unixových systémech používány dobrovolné zámky (anglicky advisory lock), takže je zodpovědností programátora si před přístupem k souboru zkontrolovat, zda na něm není nastaven zámek.
V rámci různých druhů Unixu existuje několik druhů zamykacích mechanismů a spousta operačních systémů podporuje více než jeden druh kvůli kompatibilitě. Nejčastěji používanými mechanismy jsou fcntl
[1] a flock(2)
.[2] Třetím používaným mechanismem je lockf(3)
,[3] který může být implementován odděleně nebo může být vytvořen implementací jednoho z prvních dvou mechanismů.
V tomto článku byl použit překlad textu z článku File locking na anglické Wikipedii.