flock() (was Re: /etc/passwd is locked)

Jan Kasprzak kas na informatics.muni.cz
Středa Duben 22 22:01:14 CEST 1998


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.

: 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).

	flock() nebo fcntl(fd, F_SETLK) zamykani ma tu nevyhodu, ze nefunguje
skrz sit (napriklad pokud je soubor sdileny pres NFS, muzou si dva procesy
na ruznych strojich tento soubor zaroven zamcit. Coz u (dobre napsanych[1])
zamykacich souboru nenastane.

	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.

: Idealni by bylo, kdyby si to system ohlidal sam,
: ale to jsem asi moc velkej snilek...

	Pokud chcete z vice procesu menit to stejne misto souboru,
bude vysledek nedeterministicky. Pokud ale chcete pridavat data na konec
souboru, staci pouzit O_APPEND a system to skutecne ohlida sam.

-Yenya

--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz>       http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz   0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\             Czech Linux Homepage:  http://www.linux.cz/              ///
 Considering exactly how many truly stupid things the BSD guys have done it
 continually makes me surprised  how many people still consider their ideas
 good without thinking too much about them.     --Linus on BSD securelevels


Další informace o konferenci Linux