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!


Reply via email to