Az emberállomány (2) beállítja vagy eltávolítja a tanácsadói zárat

Beállítja vagy eltávolítja egy tanácsadói zárat egy fd-ben megadott nyílt fájlra. Az operációs argumentum a következő értékek valamelyikét tartalmazhatja: LOCK_SH Közös zárolás beállítása. Egy adott fájlra vonatkozó általános zár egynél több folyamatot is tartalmazhat. LOCK_EX Telepítse az exkluzív zárat. Csak egy folyamat rendelkezik kizárólagos fájlzárral. LOCK_UN Törölje a folyamatban lévő meglévő zárat.

Az állomány () hívás blokkolható, ha egy inkompatibilis záratípust már egy másik folyamat tart fenn. Nem blokkoló lekérdezés végrehajtásához adja hozzá a LOCK_NB (VAGY műveleten keresztül) valamelyik fent leírt értékhez.

Egy fájlnak egyszerre nem lehet általános és kizárólagos záródása.

A flock () által létrehozott zárak a megnyitott fájlleíróhoz kapcsolódnak (lásd: open (2)). Ez azt jelenti, hogy az ismétlődő fájlleírókkal (, például, hívja villa (2) vagy dup (2)) jelzi egy zárat, és a zár nem lehet módosítani vagy távolítható el ezek közül bármelyik fájlleírók. Ezenkívül a lezárást vagy a LOCK_UN műveletet kifejezetten végrehajtja a másolat fájlleíróinak egyikénél, vagy ha az összes ilyen fájlleíró le van zárva.

Ha az eljárás során a nyitott (2) (vagy hasonló hívás) egynél több fájl leíró hogy ugyanazt a fájlt, a fájlleírókkal tartják állományban () független. Megpróbálhatja megakadályozni a fájlt a fájlleírók egyikével, mert a zárolás miatt a hívási folyamat már telepítve van egy másik fájlleíróon keresztül.

A folyamat csak a lezárás egyik típusán tarthatja a fájlt (általános vagy exkluzív). A már zárolt fájlban lévő flock () -re történő későbbi hívások az aktuális zárolást egy új zárolási módba konvertálják.

A flock () által létrehozott zárolások a execve (2) végrehajtásakor kerülnek mentésre.

A megosztott vagy exkluzív zárolás telepíthető a fájlra, függetlenül attól a módtól, amelyben a fájl megnyitásra került.

TÖRLÉS ÉRTÉKE

A sikertelenül 0 visszaküldik, hiba esetén a -1-et visszaadja, és az errno a megfelelő értékre van állítva.

Az EBADFfd nem nyitott fájlleíró. EINTR A zárolás várakozásakor a hívást megszakította a kezelőhöz érkező jel; lásd a (7) jelet. EINVAL A művelet érvénytelen. ENOLCK A rendszermagnak nem volt elég memóriája ahhoz, hogy létrehozzon egy zárolási rekordot. EWOULDBLOCK A fájl zárolva van, és megadta a LOCK_NB zászlót.

A SZABVÁNYOK MEGFELELÉSE

4.4BSD (először az állomány () hívás megjelent a 4.2BSD-ben). Az állomány () hívás a legtöbb UNIX rendszeren fut, fcntl (2) esetén.

Mivel kernel 2.0, állományban () van megvalósítva, mint egy független rendszer hívást, és nem mint a emulációs, a GNU C könyvtár segítségével fcntl (2). Ebben a megvalósításban nincs kölcsönhatása fajta zár elhelyezett állomány () és fcntl (2) és állomány () nem észleli a holtpont (vegye figyelembe, hogy az egyes rendszerek, mint például a modern BSD felhívja állományban () és fcntl (2 ) blokkolva egymással való kölcsönhatáskor).

A Linux kernelekben a 2.6.11 verzióig a flock () nem blokkolja a fájlokat az NFS-vel (vagyis a zárolási lefedettség a helyi rendszerre korlátozódik). Ehelyett használhatja az NFS-ben működő fcntl (2) byte-régiózárat, de a Linux egy sokkal későbbi verziójában érhető el, és a szervernek szintén támogatnia kell a zárolást. A Linux 2.6.12-től kezdődően az NFS-ügyfelek támogatják a flock () reteszelést azáltal, hogy emulálják őket a byte-régió lezárásával a teljes fájl számára. Ez azt jelenti, hogy az fcntl (2) és a flock () zárolások egymással kommunikálnak NFS-en keresztül. A Linux 2.6.37-től kezdődően a kernel támogatja a kompatibilitási módot, amely lehetővé teszi, hogy olvassa el a zároló állományt () (valamint zárja le a helyi bcntl (2) bájtot); lásd a local_lock paraméter leírását az nfs (5) -ben.

A flock () csak tanácsadó zárakat állít be; a fájlnak megfelelő jogokkal rendelkezik, akkor a folyamat figyelmen kívül hagyhatja a flock () használatát, és végrehajthatja az I / O műveletet a fájlban.

A flock () és az fcntl (2) különböző szemantikát mutat a létrehozott folyamatok és a dup (2) számára. Azon rendszereknél, ahol a flock () az fcntl (2) használatával valósul meg, a flock () szemantika eltér a súgóoldalon leírtaktól.

Amikor konvertáló zár (összesen kizárólagos vagy fordítva) nem garantált atomicitás műveletek: az első a jelenlegi tiltás eltávolítjuk, majd egy új készlet. E között a két művelet egy másik folyamat vár zárolási kérelem kaphat rá engedélyt, ami átalakítás vagy blokkolt vagy nem, ha a zászló lett megadva LOCK_NB. (Ez az eredeti BSD viselkedés sok más implementációban is megtörténik.)