7.fct c acces fis-posix pt io.txt

Download 7.fct C acces fis-posix pt IO.txt

If you can't read please download the document

Upload: madalina-oprea

Post on 08-Nov-2015

4 views

Category:

Documents


0 download

TRANSCRIPT

7.Funcii C de acces la fiiere; apeluri sistem POSIX pentru I/OExista 2 posibilitati de efectuare a operatiilor I/O din programe C:1) Prin functiile standard C(fopen,fclose,fgets,fprintf,fread,fwrite,fseek,etc) existente inbibliotecile stndard C; prototipurile acestora se afla in fisierul standard header (nivelul superior de prelucrare al fisierelor). Functiile din aceasta categorie repereaza orice fisier printr-o structura FILE *, pe care o numim descriptor de fisier.-fopen: FILE *fopen(const char* filename,const char* mode)-fclose: int fclose(FILE *filename)-fgets: char* fgets(char *str,int num,FILE *fisier)-fprintf: int fprintf(FILE* stream,const char*format,...)-fscanf: int fscanf(FILE* stream,const char* format,...)-sprintf: int sprintf(char* str,const char* format,...)-sscanf: int sscanf(const char* str, const char* format,...)-fread: size_f fread(void * ptr,size_t size,size_t count, FILE* stream)-fwrite: size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream)-fseek: int fseek(FILE* stream,long int offset,int origin)2) Prin functii standardizate POSIX (open,close,read,write,lseek,dup,dup2,fcntl,etc) care reprpuncte de intrare in nucleul Unix si ale caror prototipuri se afla de regula in fisierul header, dar uneori se pot afla si in sau (nivelul inferior de prelucrareal fisierelor)*Functiile din aceasta categorie constituie apeluri sistem Unix pentru lucrul cu fisiere.Ele (antetul lor) sunt cuprinse in standardul POSIX.*int open (char *nume,int flag [,unsigned int drepturi]);->Functia open intoarce un intreg -handle sau descriptor de fisier,folosit ca prim argument de catre celelalte functii POSIX de acces la fisier. In caz de esec, open intoarce val -1 si pozitioneaza corespunzator variabila errno (fie descr acest nr)->nume -specifica printr-un string C, calea si numele fisierului in conformitate cu standardulUnix.->modul de deschidere este precizat de parametrul de deschidere flag. Principalele lui valori posibile: O_RDONLY, O_WRONLY, O_RDWR,O_APPEND,O_CREAT, O_TRUNC, O_EXCL,O_NDELAY.->parametrul drepturi este necesar doar la crearea fisierului si indica drepturile de acces la fisier (prin cei 9 biti de protectie) si actioneaza in concordanta cu specificarea umask*int close (int descr); =inchiderea unui fisier->param descr este cel intors de apelul sistem open cu care s-s deschis fisierul->intoarce 0 la succes sau -1 in caz de esec*int read (int descr, void *mem, unsigned int noct);*int write(int descr, const void *mem, unsigned int noct);->efectul lor este acela de a citi (scrie) din (in) fisierul indicat de descr un numar de noct octeti, depunand (luand) informatiile in (din) zona de memorie aflata la adresa mem. In majcazurilor de utilizare, mem refera un sir de caractere (char* mem).->operatii atomice -indivizibile si neintreruptibile de catre alte procese->daca la lansarea unui read nu mai exista niciun octet necitit din fisier -s-a intalnit marcajul de sfarsit de fisier => fct intoarce val 0->daca op de citire sau de scriere nu se poate termina -a aparut o eroare in timpul transferului=>fct intoarce -1 si se pozitioneaza coresp variabila errno*long lseek (int descr, long noct, int deUnde);->faciliteaza accesul direct la orice octet din fisier->se modifica pointerul curent in fisierul indicat de descr cu un numar de noctet octeti.Punctul de unde incepe numararea celor noctet octeti este indicat de catre valoarea paramdeUnde, astfel: - de la inceputul fis, daca are valoarea SEEK_SET(val 0) - de la pozitia curenta daca are valoare SEEK_CUR(val 1) - de la sfarsitul fisierului daca are valoarea SEEK_END(val 2)*int dup (int descrvechi);*int dup2 (int descrvechi, int descrnou);->descrvechi = o intrare in tabela de fisiere deschise a unui proces, care puncteaza spre o intrare in tabela de fisiere deschise a sistemului->descrnou = o noua intrare din tabela de fisiere a procesului, rezultata in urma apeluluisistem, prin dup sau dup2, care va puncta spre acelasi fisier din tabela de fisiere deschisea sistemului*int fcntl(int fd, int cmd);*int fcntl(int fd, int cmd, long arg);*int fcntl(int fd, int cmd, struct flock *lock);-> fd=fisierul deschis asupra caruia se doreste aplicarea controlului-> cmd=constanta care specifica operatia dorita