CATEGORII DOCUMENTE |
Functii de intrare si iesire - stdio.h
Limbajul C nu dispune de instructiuni de intrare/iesire. Aceste operatii se realizeaza prin intermediul unor functii din biblioteca standard a limbajului C. Aceste functii pot fi aplicate in mod eficient la o gama larga de aplicatii datorita multiplelor facilitati pe care le ofera. De asemenea, ele asigura o buna portabilitate a programelor, fiind implementate intr-o forma compatibila pe toate sistemele de operare.
O alta caracteristica a limbajului C consta in faptul ca nu exista un sistem de gestionare a fisierelor care sa permita organizari de date, asa cum in alte limbaje exista fisiere cu organizare relativa sau indexata. In limbajul C toate fisierele sunt tratate ca o insiruire de octeti, neexistand structuri de date specifice care sa se aplice acestor fisiere. Programatorul poate sa interpreteze datele dupa cum doreste Prin urmare, prin scrierea/citirea datelor se scriu/citesc un numar de octeti fara o interpretare specifica.
Functiile de intrare/iesire, tipurile si macrodefinitiile din 'stdio.h' reprezinta aproape o treime din biblioteca.
In C, intrarea standard respectiv iesirea standard sunt in mod implicit reprezentate de terminalul de la care s-a lansat programul.
Prin fisier intelegem o multime ordonata de elemente pastrate pe diferite suporturi. Aceste elemente se numesc inregistrari. Suporturile cele mai des utilizate sunt cele magnetice (floppy sau harddiscuri). Ele se mai numesc suporturi reutilizabile deoarece zona utilizata pentru pastrarea inregistrarilor unui fisier poate fi ulterior reutilizata ulterior pentru pastrarea inregistrarilor unui alt fisier. In C un fisier reprezinta o sursa sau o destinatie de date, care poate fi asociata cu un disc sau cu alte periferice.
Biblioteca accepta fisiere de tip text si binar, desi in anumite sisteme, de exemplu UNIX, acestea sunt identice.
Un fisier de tip text este o succesiune de linii, fiecare linie avand zero sau mai multe caractere terminate cu ' n '. Intr-o alta reprezentare, anumite caractere pot fi convertite intr-o succesiune de caractere, adica sa nu existe o relatie unu la unu intre caracterele scrise (citite) si actiunea perifericului. De exemplu, caracterul NL (new line), ' n ', corespunde grupului CR (carriage return) si LF (line feed).
In aceeasi idee, se considera ca datele introduse de la un terminal formeaza un fisier de intrare. Inregistrarea se considera ca este formata de datele unui rand tastate de la terminal (tastatura, keyboard), deci caracterul de rand nou NL se considera ca fiind terminator de inregistrare. In mod analog, datele care se afiseaza pe terminal (monitor, display) formeaza un fisier de iesire. Si in acest caz inregistrarea este formata din caracterele unui rand.
Ceea ce este important de subliniat este ca fisierele text pot fi accesate la nivel de octet sau de caracter, ele putand fi interpretate drept o colectie de caractere, motiv pentru care se si numesc fisiere text. Toate functiile de intrare/ iesire folosite pana acum se pot utiliza si pentru fisierele text.
Un fisier de tip binar este o succesiune de octeti neprelucrati care contin date interne, cu proprietatea ca daca sunt scrise si citite pe acelasi sistem, datele sunt egale.
Aceste fisiere sunt organizate ca date binare, adica octetii nu sunt considerati ca fiind coduri de caractere. La fisierele binare inregistrarea se considera ca este o colectie de date structurate numite articole. Structurile de date sunt pretabile pentru stocarea in astfel de fisiere
Tratarea fisierelor se poate face la doua nivele, inferior si superior.
Nivelul inferior de prelucrare a fisierelor ofera o tratare a fisierelor fara zone tampon (buffere), facand apel direct la sistemul de operare. Rezervarea de zone tampon este lasata pe seama utilizatorului. Fisierele de tip text se preteaza la o astfel de tratare.
Nivelul superior de prelucrare a fisierelor se bazeaza pe utilizarea unor proceduri specializate in prelucrarea fisierelor care printre altele pot rezerva si gestiona automat zonele tampon necesare. Fisierele binare se pot manipula cu facilitate la acest nivel. Functiile specializate de nivel superior au denumiri asemanatoare cu cele de nivel inferior, doar prima litera a numelui este f.
In practica operatiile de intrare/iesire (I/O) cu memoria externa (hard-disk sau floppy-disk) sunt mult mai lente decat cele cu memoria interna. Din aceasta cauza, pentru a spori viteza de lucru, se incearca sa se reduca numarul de operatii de acces la disc. In acest scop se folosesc bufferele.
Un buffer este o zona de memorie in care sistemul memoreaza o cantitate de informatie (numar de octeti), in general mai mare decat cantitatea solicitata de o operatie de I/O. Daca un program efectueaza o operatie de citire a 2 octeti dintr-un fisier, atunci sistemul citeste intr-un buffer intreg sectorul de pe disc (512 octeti) in care se gasesc si cei 2 octeti solicitati, eventual chiar mai mult, in functie de dimensiunea bufferului (zonei tampon). Daca in continuare se vor solicita inca 2 octeti, acestia vor fi preluati din bufferul din memorie, fara a mai fi nevoie sa mai accesam discul pe care se afla fisierul din care se face citirea. Operatiile de citire continua in acest mod pana la citirea tuturor octetilor din buffer, moment in care se va face o noua umplere a bufferului cu noi date prin citirea urmatorului sector de pe disc. Invers, daca un program efectueaza o operatie de scriere a unui numar de octeti pe disc, acestia se vor inscrie de fapt secvential in buffer si nu direct pe disc. Scrierea va continua astfel pana la umplerea bufferului, moment in care sistemul de operare efectueaza o operatie de scriere a unui secto de pe disc cu cei 512 octeti din buffer (se goleste bufferul prin scriere). In acest fel, reducand numarul de operatii de acces la disc (pentru citire sau scriere) creste viteza de executie a programelor si fiabilitatea dispozitivelor de I/O.
Bufferele au o marime implicita, dar ea poate fi modificata prin program. Dimensiunea trebuie aleasa in functie de aplicatie tinand cont de faptul ca prin marirea bufferului creste viteza de executie dar scade dimensiunea memoriei disponibile codului programului si invers, prin micsorarea sa creste memoria cod disponibila dar scade viteza de lucru. Bufferul de tastatura are, spre exemplu, dimensiunea de 256 octeti, din care 254 sunt pusi la dispozitie.
Orice fisier are o inregistrare care marcheaza sfarsitul de fisier. In cazul fisierelor de intrare ale caror date se introduc de la terminal, sfarsitul de fisier se genereaza in functie de sistemul de operare considerat. Pentru sistemele de operare MS-DOS sau MIX si RSX11 se tasteaza CTRL/Z iar pentru UNIX se tasteaza CTRL/U.
Un fisier stocat pe suport magnetic se mai numeste si fisier extern. Cand se prelucreaza un astfel de fisier se creaza o imagine a acestuia in memoria interna (RAM) a calculatorului. Aceasta imagine se mai numeste si fisier intern.
Un fisier intern este conectat la un fisier extern sau dispozitiv prin deschidere; conexiunea este intrerupta prin inchidere. Deschiderea unui fisier intoarce un pointer la un obiect de tip FILE, care contine toate datele necesare pentru controlul fisierului. Operatiile de deschidere si inchidere a fisierelor se poate realiza in C prin functii specializate din biblioteca standard I/O a limbajului. Alte operatii care sunt executate frecvent in prelucrarea fisierelor sunt:
Crearea unui fisier (acest fisier nu exista in format extern)
Actualizarea unui fisier (deja existent)
Adaugarea de inregistrari unui fisier deja existent
Consultarea unui fisier
Pozitionarea intr-un fisier
Redenumirea unui fisier
Stergerea unui fisier
Ca si operatiile de deschidere si inchidere de fisiere, operatiile indicate mai sus pot fi realizate printr-un set de functii aflate in biblioteca standard I/O a limbajului. Aceste functii realizeaza actiuni similare sub diferite sisteme de operare, dar multe dintre ele pot depinde de implementare. In cele ce urmeaza se prezinta functiile care au o utilizare comuna pe diferite medii de programare si sunt cele mai frecvent utilizate.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 939
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved