Darko je napisal:
> > Lock
> > fh = open(lockFName, O_WRONLY OR O_CREAT, 0666);
> > if fcntl(fh, F_SETLK, flock(F_WRLCK,SEEK_SET,0,0)) == -1
> > ...
> > Unlock
> > close(fh);
> >
> > Muèi me pa nekaj drugega - kako naj izbri¹em lock datoteko, ko je ne
rabim
> > veè? Ja, saj vem, z 'remove'... Ampak kdaj? Vedno bolj se mi dozdeva, da
se
> > to sploh ne da - vsaj èe je Lock napisan tako, kot sem ga jaz :-(
> Ce prav razumem ti je lock datoteka samo status ki pove ali lahko dostopas
> do sredstva ali ne.
Res je.
> Jaz bi jo pobrisal neposredno pred odklepanjem. Mislim
> da je to varno ker jo proces se vedno drzi zaklenjeno. Ce jo brises za tem
> se lahko zgodi da te scheduler prekine, datoteka je se vedno tam in
oznacuje
> da je dostop do sredstva nemogoc v bistvu pa to ni vec res (vsaj takrat).
Po mojih preizkusih (RedHat 7.0, kernel 2.2.16) to ne dela. Zadeva se obna�a
nekako takole:
Proces A: lockne datoteko
Proces B: naredi open(...) ki uspe
A: remove
A: close
B: fcntl - uspe, ampak datoteke v tem trenutku v datotecnem sistemu ni
videti (seveda, saj je bila zadnja operacija nad njo 'brisanje', ki je
uspelo)
C: open() - uspe, spotoma naredi datoteko v datotecnem sistemu
C: fcntl - uspe!
In, bumf, imam dva procesa, ki mislita, da sta ekskluzivna lastnika :-(
Pozdrav,
Gp
=WinGpT= Sanity is relative ... but not one of mine!