Extras din proiect
1. Fisiere în C(intrari/iesiri si functii de biblioteca)
1.1 Generalitati
Bibliotecile standard C ofera o mare varietate de functii pentru operatii de intrare/iesire, orientate pe fisiere, ca si o clasa larga de functii generale. Dispozitivele periferice ale sistemului sunt vazute tot ca fisiere, cu indentificatori predefiniti.
Functiile de I/E se pot clasifica dupa diverse criterii.Astfel, exista functii de citire/scriere la nivel de caracter (octet), la nivel de sir de caractere (linie de text), functii de I/E cu conversie de format, functii la nivel de inregistrari (fara conversie de format), functii pentru acces direct, etc.
Limbajul C are un set de functii care sunt usor de implementat pe orice sistem , respectând acceasi sintaxa.
Independenta totala de sistemul de operare nu se realizeaza totdeauna (la MS-DOS) exista, de exemplu, anumite detalii de implementare care nu pot fi ocolite, cum ar fi modul text/modul binar, dar o buna parte din functii este universala ( exista în orice implementare). Exista doua clase mari de functii de I/E numite functii standard si functii de sistem. Functiile de sistem corespund implementarii C sub sistemul de operare UNIX dar ele coincid practic cu functiile DOS orientate pe headere ( versiuni DOS>=3.0).
Prototipul functiilor de biblioteca sunt cuprinse în fisiere header cu nume predefinite. În continuare voi prezenta principalele functii ale bibliotecii standard, specificandu-se si fisierul header unde sunt declarate prototipurile.
1.2 Intrari /iesiri standard (stdio.h)
1.1.1 Accesul la fisiere
Conceptul de baza de la intrari/iesiri standard este cel de pointer de fisier. În orice implementare este definit ( cu typedef) un tip structura, numit FILE. Nu intereseaza ce contine concret structura, deoarece functiile folosesc pointeri catre tipul FILE. Fisierele disc si dispozitivele de intrare/iesire sunt gestionate în mod univoc prin variabile de tip FILE*, care se asociaza în mod unic la fiecare fisier prelucrat, pe durata prelucrarii. Dispozitivele de intrare/iesire standard au asociate permanent cîte un asemenea pointer, cu nume predefinit. Declararea unui pointer la fisier se face prin FILE*intrare,*iesire .
FLUXURILE
Multe carti si reviste considera pointerii de fisier din limbajul C ca pointeri de fluxuri. Spre deosebire de alte limbaje de programare, C nu presupune ca fisierele contin informatii într-un anumit format. Limbajul C considera ca orice fisier este pur si simplu o colectie de octeti. Atunci când citim un fisier, îl parcurgem octet dupa octet, ca pe un flux de octeti. Interpretarea octetilor este lasata pe seama programelor sau functiilor noastre. De exemplu, functia fgets considera caracterul avans de rînd ca sfârsit al unei linii si începutul alteia. Functia fgets interpreteaza acest caracter în mod automat. Cu alte cuvinte, nu limbajul C interpreteaza octetii. Atunci când scriem programe si functii care lucreaza cu fisiere, ne gândim la fisiere ca la o colectie de octeti si nu mai mult.
Daca examinam fisierul antet stdio.h, vom gasi definitia structurii FILE. În cazul compilatorului turbo C++ Lite, structura are forma urmatoare :
Typedef struct
{
short level ; //Nivel plin/gol al bufferului
unsigned flags; //Indicatoare de stare fisier
char fd; //Descriptor fisier
unsigned char hold //ungetc chiar daca nu e buffer
short bsize; //Dimensiune buffer
unsigned char *buffer //Buffer transfer date
unsigned char *curp //Pointerul activ curent
unsigned istemp //Indicator de fisier temporar
short token; //Folosit pentru testare
//validitate
} FILE; //Acesta este obiectul FILE
Structura FILE contine descriptorul de fisier de nivel jos pe care sistemul de operare îl foloseste pentru a accesa fisierele, dimensiunea bufferului fisierului si locatia sa ,bufferul de caractere pe care îl foloseste ,ungetch-un indicator care arata daca fisierul este temporar si alte variabile de tip indicator(flag).În plus, structura FILE pastreaza pointerul de fisier care tine evidenta locatiei curente în interiorul fisierului.
În mediu DOS, cele mai multe compilatoare definesc un tablou cu dimensiune fixa(de obicei 20) de pointeri de fisier care gazduiesc informatia pentru fiecare fisier pe care îl deschide programul nostru.Daca programul trebuie sa deschida mai mult de 20 de fisiere,trebuie sa studiem documentatia care însoteste compilatorul pentru a ne informa ce pasi trebuie facuti în vederea modificarii dimensiunii tabloului de pointeri de fisieri.
În continuare sunt prezentate functiile de intrare/ iesire standard.
a) Deschiderea fisierelor
DESCHIDEREA UNUI FISIER CU FOPEN
Multe programe în C create pastreaza si regasesc informatia în fisiere. Înainte de a putea citi sau scrie informatia în fisier, programul trebuie sa deschida fisierul. Functia fopen permite programelor sa deschida un fisier. Formatul functiei fopen este urmatorul:
Preview document
Conținut arhivă zip
- Fisiere Text.doc