CATEGORII DOCUMENTE |
Citirea dintr-un fisier
Citirea dintr-un fisier deschis in prealabil cu functia _open se realizeaza cu ajutorul functiei _read. Ea returneaza numarul efectiv al octetilor cititi din fisier. Functia _read se poate apela folosind o expresie de atribuire de forma:
nr = _read(df,zt,n)
cu definitia generala:
int _read( int handle, void *buffer, unsigned int count );
unde:
nr - este o variabila de tip intreg careia i se atribuie numarul de octeti cititi din fisier.
df - este descriptorul de fisier returnat de functia open la deschiderea sau creat la crearea fisierului.
zt - este un pointer spre zona tampon definita de utilizator, zona in care se face citirea.
n - reprezinta numarul de biti care se citesc
Functia _read citeste maximum count octeti in buffer din fisierul asociat cu descriptorul handle. Operatia de citire incepe de pe pozitia curenta indicata de pointerul de fisier asociat cu fisierul dat. Dupa operatia de citire, pointerul de fisier indica spre urmatorul octet necitit din fisier. Daca fisierul a fost deschis in mod text, citirea se termina la intalnirea caracterului CTRL/Z, care este interpretat drept indicator de sfarsit de fisier.
_read returneaza numarul de biti cititi din fisier, care poate fi mai mic decat count daca sunt mai putini decat count octeti ramasi in fisier sau daca fisierul este deschis in mod text. In acest caz fiecare pereche CR-LF (carriage return-linefeed) (CR-LF) este inlocuita cu un singur caracter LF. Numai acest caracter LF se considera in valoarea returnata. Inlocuirea nu afecteaza pointerul de fisier. Daca functia incearca sa citeasca dupa sfarsitul fisierului, se returneaza valoarea 0. Daca descriptorul de fisier (handle) este invalid sau daca fisierul nu este deschis pentru citire sau daca este blocat, functia returneaza valoarea negativa -1 si seteaza variabila errno la EBADF.
Tipul erorii si depistarea ei este dependenta de sistemul de operare utilizat. Daca n = 1, se citeste un singur octet. De obicei, nu este eficient sa se citeasca cate un octet dintr-un fisier, deoarece apelurile multiple ale functiei _read pot conduce la un consum de timp apreciabil. Dimensiunea maxima a lui n este dependenta de sistemul de operare. O valoare utilizata frecvent este 512, valoare optima pentru MS-DOS sau pentru UNIX.
Functia _read citeste maximum count biti in zona buffer din fisierul cu descriptorul handle. Operatia de citire incepe de la pozitia curenta a pointerului de fisier asociat cu fisierul respectiv. Dupa o operatie de citire, pointerul fisier indica spre urmatorul caracter (octet) necitit din fisier. Daca fisierul a fost deschis in mod text, _read se termina cand se intalnete indicatorul de fisier CTRL/Z.
Functia _read poate fi utilizata pentru a citi de la intrarea standard (tastatura). In acest caz descriptorul de fisier are valoarea 0. De asemenea, in acest caz nu este nevoie sa apelam functia _open deoarece fisierul se deschide automat la lansarea programului.
Exemplu:
/* Acest program deschide fisierul WRITE.O creat anterior si incearca sa citeasca 60000 octeti din fisier folosind _read. Apoi va afisa numarul de octeti cititi */
#include <fcntl.h> /* Necesara numai pentru definirea _O_RDWR */
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
char buffer[60000];
void main( void )
/* Read in input: */
if((bytesread = _read(fh,buffer,nbytes)) <= 0)
perror( 'Problem reading file' );
else
printf( 'Read %u bytes from filen', bytesread );
_close( fh );}
La executia programului se va afisa urmatorul mesaj:
Read 36 bytes from file
Press any key to continue
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1541
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved