Scrigroup - Documente si articole

     

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


Nivelul inferior de prelucrare al fisierelor

c



+ Font mai mare | - Font mai mic



Nivelul inferior de prelucrare al fisierelor

La acest nivel de prelucrare se folosesc 5 functii:



open (creat)- pentru deschiderea fisierelor;

read - pentru citirea din fisier;

write - pentru citirea din fisier;

lseek - pentru pozitionarea in fisier;

close - pentru inchiderea fisierului.

1. Deschiderea unui fisier

Orice fisier inainte de a fi prelucrat trebuie deschis. Aceasta operatie se realizeaza prin intermediul functiei open al carui prototip este urmatorul:

int open (const char *cale, int acces);

unde:

cale este un pointer spre un sir de caractere care defineste calea spre fisierul care se deschide (in cea mai simpla forma este numele fisierului daca se afla in directorul curent)

acces este o variabila de tip intreg care poate lua una din valorile:

- O_RDONLY - fisierul se deschide numai in citire (consultare);

O_WRONLY - fisierul se deschide numai in scriere (creare);

(sau O_CREAT

O_RDWR - fisierul se deschide in citire/scriere;

O_APPEND - fisierul se deschide la sfarsit pentru adaugare;

O_BINARY - fisierul se prelucreaza binar;

O_TEXT - fisierul este de tip text.

Unele valori din cele de mai sus se pot combina cu ajutorul operatorului |. De exemplu O_RDWR O_BINARY pentru deschiderea fisierului in scriere/citire binara.

Observatii:

1o. Functia open intoarce descriptorul de fisier care este o valoare intreaga ce va identifica fisierul in toate celelalte operatii care se vor realiza asupra lui. Daca deschiderea unui fisier nu reuseste (de obicei unul din parametrii este eronat) atunci functia open returneaza valoarea -1.

2o. Pentru a putea utiliza functia open trebuie incluse fisierele header io h si fcntl h.

3o. Pentru a crea un fisier nou se va folosi functia creat in locul functiei open cu prototipul:

int creat (const char *cale, int mod);

unde:

- cale are aceeasi semnificatie ca si la functia open

- mod este un intreg care poate fi definit prin constantele simbolice de mai jos:

S_IREAD - se poate citi fisierul;

S_IWRITE - se poate scrie in fisier;

S_IEXEC - se poate executa programul continut in fisier.

Utilizarea functiei presupune includerea fisierelor io h si stat h

4o. Implicit fisierul se considera ca este de tip text

Exemple:

char nume_fisier[ ]="fis1.dat";

int df;

df = open (nume_fisier, O_RDONLY);

Prin apelul de mai sus se deschide in citire fisierul fis1.dat din directorul curent.

int df;

df = open ("c:borlandchelp.txt",O_APPEND);

Se deschide in adaugare fisierul help txt din directorul borlandc de pe discul C.

2. Citirea dintr-un fisier (consultare)

Functia folosita pentru operatia de citire dintr-un fisier in memorie se numeste read si are prototipul urmator:

int read (int df, void *buf, unsigned lung);

unde:

df este descriptorul de fisier a carui valoare a fost definita la deschidere;

buf este pointerul spre zona de memorie in care se receptioneaza inregistrarea care se citeste;

lung este lungimea in octeti a inregistrarii citite.

Observatii:

1o. La fiecare apel functia returneaza inregistrarea curenta. La primul apel se citeste prima inregistrare din fisier, la al doilea apel se citeste a doua, etc. Ordinea inregistrarilor in fisier este cea definita la crearea fisierului.

2o. La un apel al functiei read se citesc cel mult lung octeti inregistrarea avand definita lungimea la scrierea in fisier. Functia reintoarce numarul de octeti cititi, 0(zero) la sfarsit de fisier, sau -1 la eroare. De obicei se folosesc frecvent inregistrari de 512 octeti sau chiar mai mari.

3o. Functia read poate fi folosita pentru a citi de la intrarea standard. In acest caz, descriptorul de fisier este 0 (stdin are 0, stdout are 1, stderr are 2 stdprn are 3 stdaux are 4). Programatorul nu trebuie sa deschida fisierele standard deoarece ele sunt deschise automat la lansarea in executie a programului.

4o. Utilizarea functiei read, presupune includerea fisierului io h.

3. Scrierea intr-un fisier (creare, actualizare, adaugare)

Pentru a scrie intr-un fisier se foloseste functia write. Se presupune ca fisierul este deschis in prealabil prin functia creat sau open. Ea este asemanatoare cu functia read, doar ca realizeaza transferul invers, adica din memorie in fisier si are prototipul:

int write (int df, void *buf, unsigned lung);

Observatii:

1o. Functia returneaza numarul octetilor scrisi in fisier. Acesta este egal cu lung si defineste lungimea inregistrarii scrise in fisier. In cazul in care numarul returnat de functia write difera de parametrul lung scrierea a fost eronata si se reintoarce valoarea -1.

2o. Utilizarea functiei write implica includerea fisierlui io h.

4. Pozitionarea intr-un fisier

Pentru a avea acces aleator la inregistrarile unui fisier se foloseste o functie de pozitionare in fisier pe anumite inregistrari dorite. Pe fisierele care au suporturi magnetice este posibila pozitionarea cu ajutorul functiei lseek care are prototipul urmator:

long lseek (int df, long deplasament, int origine)

unde:

df este descriptorul de fisier;

deplasament    defineste numarul de octeti peste care se va deplasa capul de

scriere/citire al discului;

origine    are una din valorile:

0 deplasamentul se considera de la inceputul fisierului;

1 deplasamentul se considera din pozitia curenta a capului de

scriere/citire;

2 deplasamentul se considera de la sfarsitul fisierului.

Observatii:

1o. Functia returneaza pozitia capului de citire/scriere fata de inceputul fisierului in numar de octeti sau -1L la eroare.

2o. Functia nu realizeaza nici un transfer de informatie ci doar pozitioneaza capul de citire/scriere in fisier. Deci pentru transfer e nevoie de functiile read sau write.

3o. Utilizarea functiei presupune includerea fisierului io h.

4o. Apelul lseek (df, 0L, 0) permite o pozitionare la inceput de fisier,

iar apelul lseek (df, 0L, 2) permite o pozitionare la sfarsit de fisier.

5. Inchiderea unui fisier

La sfarsitul prelucrarii unui fisier acesta trebuie inchis. Acest lucru se realizeaza automat daca programul se termina prin apelul functiei exit. Programatorul poate inchide un fisier folosind functia close. Se recomanda inchiderea unui fisier de indata ce s-a terminat prelucrarea lui. Aceasta din cauza ca numarul fisierelor ce pot fi deschise simultan este limitat. Limita este dependenta de sistemul de operare si ea variaza, de obicei, in intervalul 15-25. De obicei numarul de buffere (zone tampon) asociate fisierelor se precizeaza in fisierul autoexec.bat. Mentionam ca fisierele standard din limbajul C nu se inchid de programator.

Functia close are prototipul urmator:

int close (int df);

unde

df este descriptorul fisierului care se inchide.

Observatii:

1o. La o inchidere normala, functia returneaza valoarea 0 si -1 in caz de incident.

2o. Utilizarea functiei close implica includerea fisierului io h.

Exemple

Vom deschide fisierul "fis1.dat" in creare si vom scrie in el doua inregistrari.

#include<io.h>

#include<fcntl.h>

void main (void)

else printf ("nu s-a deschis fisierul);

close (df); // se inchide fisierul

Se afiseaza continutul fisierului "fis1.dat"

#include<io.h>

#include<fcntl.h>

#include <stdio.h>

#include <conio.h>

void main (void)

else printf ("nu s-a deschis fisierul);

close (df);

getch(); // se asteapta un caracter de la tastatura

programul urmator copiaza intrarea standard la iesierea standard folosind o zona tampon de 80 de caractere:

#define LZT 80

#include <io.h>

void main (void) // copiaza intrarea standard la iesirea standard



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 881
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