Moduri de blocare

printf ("Copilul este gata să scrie

implicit. așteptați (NULL); pauză;

Acest exemplu ilustrează posibilitatea serializării proceselor. Cu toate acestea, este încă posibil să citiți și să scrieți în procesul copilului. Această opțiune de blocare se numește blocare consultativă. Când îl instalați, nu se fac verificări suplimentare pentru a determina dacă funcțiile sistemului sunt deschise. citiți și scrieți din cauza blocării este interzis atunci când este apelat. Pentru blocarea consultativă, se presupune că utilizatorul este el însuși responsabil pentru verificarea dacă există sau nu anumite încuietori. Nu puteți împiedica accesul tuturor proceselor la fișier. Numai procesele care blochează sondajul folosind fcntl. sunt blocate atunci când sunt disponibile (și acest lucru nu este întotdeauna cazul).

În alte cazuri, există așa-numitele blocări stricte. Aceste blocări împiedică accesul procesului utilizând funcții de citire sau scriere la datele care au fost blocate anterior de un alt proces prin fcntl.

Blocările stricte pot fi rezolvate prin setarea bitului Set-Group-ID și eliminarea bitului de execuție pentru grup, de exemplu:

int obligatoriu_lock (int fd)

stat statbuffer;

dacă (fstat (fd, statbuffer) <0)

fprintf (stderr, "Eroare în timpul apelului fstat # 92; n");

dacă (fdmod (fd (statbuffer.st_mode

fprintf (stderr, "Nu se poate seta strict

> Blocarea strictă este dependentă de sistem. Cu toate acestea, nu poate împiedica ștergerea fișierului prin deconectare ().

Dacă open () deschide un fișier cu semnalizatoarele O_TRUNC și O_CREAT și pentru acest fișier este setat o blocare strictă, este returnată o eroare cu valoarea errno = EAGAIN.

Articole similare