Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Apelul sistem open - UNIX

linux



+ Font mai mare | - Font mai mic



Apelul sistem open - UNIX

Apelul sistem open este primul pas ce trebuie efectuat de catre un proces pentru a putea accesa datele unui fisier.



algoritm open

intrari: numele fisierului

tipul de deschidere

permisiuni de acces /* precizate doar la creare */

iesire: descriptorul de fisier

Figura 5.2. Algoritmul pentru deschiderea unui fisier

Sintaxa apelului sistem open este:

fd = open (numeIcale, bitul de semnalizare, moduri);

unde numeIcale este un nume de fisier, bitul de semnalizare indica tipul de deschidere (pentru scriere sau citire), iar moduri specifica permisiunile de acces daca fisierul este in curs de creare. Apelul sistem returneaza un intreg numit descriptor de fisier (fd).

Toate celelalte operatii cu fisierul, cum ar fi citirea, scrierea, pozitionarea indicatorului de citire/scriere, duplicarea descriptorului de fisier, modificarea parametrilor de I/O ai fisierului, determinarea starii fisierului si inchiderea fisierului, folosesc descriptorul de fisier pe care il returneaza apelul sistem open.  Nucleul cauta fisierul in cadrul sistemului de fisiere folosind algoritmul namei (vezi figura 5.2). Dupa ce gaseste inodul din memoria interna, nucleul verifica permisiunile de acces la fisier, iar daca acestea sunt corespunzatoare, aloca o intrare in tabela de fisiere pentru fisierul care va fi deschis. O intrare in tabela de fisiere contine un pointer catre inodul fisierului deschis si deplasamentul de la care nucleul urmeaza sa execute urmatoarea citire sau scriere. Nucleul initializeaza aceasta valoare cu 0 pe durata aplelului open, ceea ce inseamna ca prima citire sau scriere se va face, implicit, de la inceputul fisierului. De asemenea, un proces poate deschide un fisier pentru adaugare, caz in care nucleul va initializa deplasamentul cu valoarea dimensiunii fisierului.

Nucleul aloca o intrare in tabela descriptorilor de fisiere utilizator, iar valoarea indexului din tabela corespunzator acestei intrari este descriptorul de fisier returnat utilizatorului. Intrarea din tabela descriptorilor de fisiere utilizator contine un pointer catre intrarea corespunzatoare din tabela de fisiere.

Figura 5.3. Structurile de date dupa executia apelurilor open

Sa presupunem ca un proces executa urmatorul cod: deschide fisierul '/etc/passwd' de doua ori, odata doar pentru citire, iar a doua oara pentru scriere, si fisierul 'local' odata, pentru citire/scriere.

fd1 = open('/etc/passwd', OIRDONLY);

fd2 = open('local', OIWRONLY);

fd3 = open('/etc/passwd', OIRDWR);

In figura 5.3. se prezinta relatia dintre tabela de inoduri, tabela de fisiere si tabela descriptorilor de fisiere utilizator. Fiecare apel open returneaza procesului un descriptor de fisier, iar intrarea corespunzatoare din tabela descriptorilor de fisiere utilizator pointeaza catre o intrare unica din tabela de fisiere din nucleu, chiar daca un fisier ('/etc/passwd') este deschis de doua ori. Intrarile din tabela de fisiere corespunzatoare aceluiasi fisier pointeaza catre o singura intrare din tabela de inoduri. Sa presupunem ca un al doilea proces executa urmatorul cod:

fd1=open('/etc/passwd',OIRDONLY);

fd2=open('private',OIRDONLY);

In figura 5.4 sunt prezentate relatiile dintre structurile de date, in situatia in care ambele procese (nu si altele) au deschis fisierele.

Figura 5.4. Structurile de date dupa deschiderea fisierelor de catre cele doua procese

S-ar putea concepe sistemul astfel ca intrarea din tabela descriptorilor de fisiere utilizator sa contina deplasamentul din fisier ce da pozitia urmatoarei operatii de I/O si pointerul direct catre intrarea corespunzatoare din tabela de inoduri, eliminandu-se folosirea tabelei de fisiere. Implementarea tabelei de fisiere ca structura separata s-a facut pentru a se putea permite folosirea in comun a deplasamentului in fisier de catre mai multi descriptori de fisier. Astfel, mai multe procese si mai multi utilizatori pot efectua operatii pe un acelasi fisier utilizand un deplasament comun. Primii trei descriptori de fisier din tabela descriptorilor de fisiere utilizator sunt :

descriptorul fisierului standard de intrare (standard input) ;

descriptorul fisierului standard de iesire (standard output);

descriptorul fisierului standard de eroare (standard error).

Procesele din UNIX folosesc in mod conventional descriptorul standard de intrare pentru a citi datele de intrare, descriptorul standard de iesire pentru a transmite la iesire rezultatele, si descriptorul standard de eroare pentru a transmite mesajele de eroare. Utilizarea acestei conventii nu este obligatorie, insa adoptarea ei de catre toti utilizatorii face mai simpla comunicarea prin pipe-uri.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 840
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved