flock() (was Re: /etc/passwd is locked)
Michal Krause
mike na navrcholu.cz
Čtvrtek Duben 23 16:17:33 CEST 1998
Jan Kasprzak wrote:
>
> Michal Krause pise:
> [...]
> : programuji pro web a tam jsou pokusy o pouziti souboru
> : od dvou pozadavku naraz celkem bezne. Jednou za cas se mi stane, ze soubor
> : zkonci s 0 velikosti.
>
> Zrejme si nekdo soubor otevrel s O_TRUNC. Jinak samozrejme
> do souboru muze zapisovat vice procesu bez nejakeho poskozeni puvodniho
> obsahu - staci pouzit O_APPEND. konci-li soubor s nulovou velikosti,
> je chyba v aplikaci.
Bohuzel append je mi nanic (v jinych pripadech ho pouzivam a tam skutecne ke
kolapsu nedochazi) - konkretne v tomto pripade vsak potrebuji data nacist,
pozmenit a zase ulozit. Nic jineho tento program nedela, takze k vynulovani
souboru muze dojit pouze tehdy pokud by se nepovedlo cteni a ja zapsal prazdno
(to skutecne ohlidane nemam, ale se cteni vice procesu naraz potize nenastavaji
[pokud vim, cist najednou muze kolik procesu chce]).
> : Rad bych vedel, jestli vytvoreni pomocneho lock souboru je
> : bezna praxe pro uzamykani souboru, jake jsou pripadne potize s funkci flock()
> : apod. (treba flock v perlu mi zpusoboval z neznameho duvodu nekonecne forkovani
> : procesu az do padu pocitace).
>
> Ale jinak samozrejme zamykani pres (treba) fcntl() je rychlejsi
> a cistsi v tom smyslu, ze cekajici proces je jadrem pozastaven az do doby,
> nez se zamek uvolni (zatimco u zamykani pres soubor musi sam kontrolovat,
> je-li zamek volny). A fcntl() zamky se uvolni (na rozdil od zamykacich
> souboru) pri pripadnem ukonceni procesu, ktery zamek drzi.
Moment, ja mel za to, ze program musi okontrolovat stav locku a pripadne pockat
na odemceni. Nebo se snad proces pri volani fopen() zastavi a ceka na uvolneni?
Nebo staci select()?
Mike
/\
----------------------------------/ \----------------------------------
Michal Krause - 4WeB /\ / \ /\
mailto:mike na navrcholu.cz / \/ \/ \ Sluzba Na vrcholu
http://4web.navrcholu.cz/ / \ / \ http://www.navrcholu.cz/
ICQ:7665279 / \ / \
------------------------------------------------------------------------
Další informace o konferenci Linux