Zamykani souboru

Jan Kasprzak kas na informatics.muni.cz
Středa Duben 19 09:44:55 MEST 2000


Milan Sorm wrote:
: Fri, Apr 14, 2000 ve 10:40:30AM +0200 Jiri Solc napsal:
: # 
: #  Pokud je mi znamo zamkly ho nema. Ne ze bych neduveroval flock(), ale
: # pokud pisu neco pro ruzne systemy mam obavu ho pouzivat a tak delam
: # nestandartni postupy (ale ucinne) se zamykacimi soubory.
: 
: A hlavne se flock() neda pouzit na NFS - to by mohl byt pro tebe, jarku,
: problem. Res to vytvorenim souboru $filename.lock a naslednym smazanim a
: prislusnymi testy.

	Ani tohle na NFS nefunguje (neni tam zadne open(...,O_CREAT|O_EXCL)).
Pokud uvazujete zamykani mezi ruznymi systemy pres NFS (a nemate
lockd/statd), jedine reseni je toto:

	while(1) {
		my $rand = really_random_number();
		open(LOCK, ">$dir/.tmp.$rand");
		last if link "$dir/.tmp.$rand", "$dir/lockfile";
		unlink "$dir/.tmp.$rand");
		sleep 2;
	}
	unlink "$dir/.tmp.$rand");
	close LOCK;

	Je mozne, ze je misto link(2) mozne pouzit i rename(2).

-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/              ///
\You did not allow to drop the packet and machine tries to keep it. It does/
\\ not hang by the way, it simply works too hard to respond 8)8)    --ANK //


Další informace o konferenci Perl