Scrigroup - Documente si articole

     

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


Citirea dintr-un fisier

c



+ Font mai mare | - Font mai mic



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



DISTRIBUIE DOCUMENTUL

Comentarii


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