CATEGORII DOCUMENTE |
Crearea fisierelor - UNIX
Daca apelul sistem open asigura accesul la un fisier existent, apelul sistem creat permite crearea unui nou fisier in sistem. Sintaxa apelului sistem creat este:
fd = creat (nume_cale, moduri);
unde variabilele numeIcale , moduri si fd au semnificatia precizata la descrierea apelului open.
Daca nu exista nici un fisier cu numele specificat, atunci nucleul creaza un nou fisier cu numele si permisiunile de acces (modurile) precizate. Daca fisierul exista deja, si permisiunile de acces sunt corespunzatoare, nucleul trunchiaza fisierul (elibereaza toate blocurile sale si seteaza dimensiunea fisierului la 0). In acest caz nucleul nu modifica atributele de proprietate, iar permisiunile de acces furnizate ca parametru sunt ignorate, pastrandu-se cele ale vechiului fisier.
In figura 5.12 este prezentat algoritmul pentru crearea unui fisier. Folosind algoritmul namei, nucleul analizeaza numele de cale si salveaza adresa primului slot liber din director in u area. Daca nucleul nu gaseste componenta corespunzatoare din cale in director, o va scrie in slotul determinat anterior. De asemenea, memoreaza in u area si tine blocat inodul directorului in care se cauta. Pentru continuarea executiei algoritmului, se verifica daca procesul apelant are dreptul de a scrie in director (acela unde va fi creat noul fisier).
In caz ca nu exista anterior un fisier cu acelasi nume, nucleul asigneaza un inod pentru noul fisier (folosind algoritmul ialloc). Apoi scrie numele fisierului si numarul inodului alocat in directorul parinte la adresa salvata in u area. Dupa aceea elibereaza inodul directorului parinte. Nucleul scrie noul inod alocat pe disc (algoritm bwrite), iar apoi directorul in noua configuratie. Scrierea pe disc are loc in aceasta ordine deoarece in cazul unei caderi a sistemului intre cele doua scrieri vom avea un inod care nu este referit de nici un nume de fisier, dar sistemul va functiona normal.
algoritm creat
intrari: numele fisierului
permisiunile de acces
iesire: descriptorul de fisier
}
else /* fisierul nu exista inca */
aloca o intrare in tabela de fisiere pentru inod, initializeaza contorul;
if (fisierul exista in momentul crearii)
elibereaza toate blocurile fisierului (algoritmul free);
deblocheaza inodul;
return (descriptorul de fisier);
}
Figura 5.12. Algoritmul pentru crearea unui fisier
Daca ordinea de scriere este inversata si sistemul se cade intre cele doua scrieri, sistemul de fisiere va contine o cale care refera un inod incorect. Daca fisierul exista deja inaintea apelului creat, nucleul gaseste inodul sau in timp ce cauta fisierul. Vechiul fisier trebuie sa ofere permisiunea de scriere procesului ce doreste sa creeze un "nou" fisier cu acelasi nume, deoarece continutul fisierului va fi modificat (se elibereaza toate blocurile fisierului, acesta aratand ca un fisier nou creat). Intrucat continutul directorului parinte nu va fi modificat, nucleul nu va mai verifica daca este permisa scrierea directorului.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1029
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved