CATEGORII DOCUMENTE |
Apelul sistem close - UNIX
Un proces inchide un fisier atunci cand nu mai doreste sa il acceseze. Sintaxa aplelui sistem close este:
close(fd);
unde fd este descriptorul fisierului returnat de open. Apelul modifica intrarile din tabela de fisiere si tabela de inoduri corespunzatoare descriptorului fd. Aceste intrari nu sunt sterse, ci doar eliberate (cand contoarele ajung la 0 se invalideaza legaturile intre tabele). Ele pot fi utilizate de acelasi fisier (daca se redeschide imediat) sau realocate altui fisier ce va fi deschis. Daca contorul de referinta din tabela de fisiere este mai mare ca 1 (datorita apelurilor sistem dup sau fork), inseamna ca si alti descriptori de fisier refera intrarea din tabela de fisiere. In acest caz nucleul va decrementa contorul din tabela de fisiere si cu aceasta operatia de inchidere ia sfarsit. Daca contorul din tabela de fisiere este egal cu 1, nucleul elibereaza intrarea si decrementeaza contorul de referinta corespunzator intrarii din tabela de inoduri. Daca contorul este egal cu 0 (nici un proces nu mai refera inodul), nucleul elibereaza inodul din memoria interna (algoritmul iput) pentru a putea fi realocat. Inaintea incheierii apelului close, nucleul elibereaza intrarea corespunzatoare descriptorului din tabela descriptorilor de fisiere utilizator. Daca procesul va incerca sa acceseze descriptorul inainte ca acesta sa fie reasignat unui fisier, nucleul va returna o eroare. Cand un proces se incheie (exit) nucleul inchide fisierele corespunzatoare descriptorilor activi din tabela descriptorilor de fisiere utilizator.
In figura 5.11 se prezinta intrarile de interes din tabelele figurii 5.4 dupa incheierea procesului B. Astfel, sunt eliberate intrarile pentru descriptorii de fisier 3 si 4 din tabela descriptorilor de fisiere utilizator, si intrarile corespunzatoare din tabela de fisiere (contoarele fiind 0). Sunt decrementate contoarele de referinta din tabela inodurilor corespunzatoare fisierelor "/etc/passwd" si "private". Cum contorul pentru "private" este 0, inodul sau este pus in lista inodurilor libere, insa intrarea sa din tabela inodurilor nu este stearsa. Daca un alt proces acceseaza fisierul "private" cat timp inodul se mai afla in lista libera, el va fi utilizat de catre nucleu (vezi 4.1.2).
Figura 5.11 Structura tabelelor dupa inchiderea unor fisiere
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1041
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved