CATEGORII DOCUMENTE |
Pozitionarea intr-un fisier
Operatiile de citire/scriere intr-un fisier se executa secvential, astfel incat:
fiecare apel al functiei _read citeste inregistrarea din pozitia urmatoare din fisier
fiecare apel al functiei _write scrie inregistrarea in pozitia urmatoare din fisier.
Acest mod de acces la fisier se numeste secvential si el este util cand dorim sa prelucram fiecare inregistrare a fisierului. In practica apar insa si situatii in care noi dorim sa scriem si sa citim inregistrari intr-o ordine oarecare. In acest caz se spune ca accesul la fisier este aleator. Pentru a realiza un acces aleator este nevoie sa ne putem pozitiona oriunde in fisierul respectiv O astfel de pozitionare este posibila pe hard-uri si floppy-uri prin functia _lseek.
Definitia functiei este:
long _lseek( int handle, long offset, int origin );
Functia _lseek muta pointerul de fisier asociat cu descriptorul handle (df) pe o noua locatie care este situata la offset octeti de origin. Urmatoarea operatie de citire/scriere se va efectua de la noua locatie. Argumentul origin trebuie sa fie una dintre urmatoarele constante, definite in STDIO.H:
SEEK_SET - inceputul fisierului (valoare 0)
SEEK_CUR - pozitia curenta a pointerului de fisier (valoare 1)
SEEK_END - sfarsitul fisierului (valoare implicita 2)
Functia _lseek returneaza valoarea 0 la pozitionare corecta si -1 la incident. Ea poate fi apelata prin:
v = _lseek(df, deplasament, origine)
unde:
v - este o variabila de tip intreg careia i se atribuie valoarea returnata de catre functie (0 sau -1)
df - este descriptorul de fisier (handle) a carui valoare a fost definita la deschiderea sau crearea fisierului.
deplasament - este o variabila de tip long si contine numarul de octeti peste care se va deplasa capul de citire/scriere al discului.
origine - are una din valorile
0 - deplasamentul se socoteste de la inceputul fisierului;
- deplasamentul se socoteste din pozitia curenta a capului de citire/scriere;
- deplasamentul se socoteste de la sfarsitul fisierului.
Mentionam ca prin apelul lui _lseek nu se realizeaza nici un fel de transfer de informatie ci numai pozitionarea in fisier. Operatia urmatoare realizata prin apelul functiei _read sau _write se va realiza din aceasta pozitie. Spre exemplu, apelul:
v = _lseek(df, 0l, 2)
permite sa se faca pozitionarea la sfarsitul fisierului. In continuare se pot adauga articole folosind functia _write.
Pozitionarea la inceputul fisierului se face prin apelul:
v = _lseek(df, 0l, 0)
Exemplu:
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
void main( void )
In urma executiei programului se va afisa:
Pozitia pentru inceputul fisierului = 0
Pozitia curenta = 10
Pozitia ultima este = 36
Press any key to continue
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 772
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved