Sunteți pe pagina 1din 20

Capitolul 10 Funcii pentru prelucrarea fiierelor

214

Limbajul C nu are instruc\iuni de intrare/ie=ire . Opera\iile de intrare/ie=ire sunt realizate prin intermediul func\iilor incluse ]n biblioteca standard a limbajului. Acest lucru ]i confer[ o mare flexibilitate =tiind c[ ]n general opera\iile de intrare/ie=ire depind puternic de sistemul de operare folosit. Opera\iile de intrare/ie=ire sunt realizate cu ajutorul unor dispoziti e foarte di erse! tastatur[" displa#" unit[\i de disc" unit[\i de band[ etc. $entru tratarea lor unitar[" fi=ierele pe astfel de dispoziti e sunt pri ite ca sec en\e ordonate de octe\i. $ozi\ia octetului curent %octetul care a fi prelucrat& este memorat[ ]ntr'o ariabil[ special[ numit[ indicator de pozi\ie . $e baza indicatorului de pozi\ie se poate face modificarea octetului curent" citirea sau scrierea la o anumit[ pozi\ie ]n fi=ier. (up[ efectuarea opera\iilor de citire sau scriere indicatorul de pozi\ie este incrementat cu un num[r de octe\i. (e asemenea" este posibil[ citirea alorii indicatorului de pozi\ie sau setarea lui la o anumit[ aloare. $ractic" un dispozitiv fizic este transformat de sistemul de fi=iere al limbajului C ]ntr'un dispozitiv logic numit flux %stream&. Astfel" func\iile de intrare/ie=ire ]=i p[streaz[ generalitatea deoarece nu se refer[ la dispoziti e fizice specifice ]n mod direct" ci prin intermediul fluxului conectat la ele. Acest fapt asigur[ portabilitatea codului generat de compilator. )n flux se reprezint[ printr'un pointer la o entitate de tip *+L, care con\ine informa\ii despre! pozi\ia curent[ ]n flux" indicatori de eroare =i de sf-r=it de fi=ier" zone tampon %buffere& asociate. ,xist[ dou[ tipuri de fluxuri! text =i binare .

Capitolul 10 Funcii pentru prelucrarea fiierelor

215

Fluxul text presupune transferul de caractere organizate ]n linii caractere %o linie se termin[ prin caracterul newline&. .ntr'un flux text pot inter eni anumite con ersii de caracter =i din acest moti este posibil s[ existe anumite nepotri iri ]ntre caracterele introduse ]n flux =i cele rezultate ]n urma transferului %de exemplu" un caracter newline poate fi con ertit ]ntr'o perec/e de caractere retur de car-avans rand&. Fluxul binar reprezint[ o succesiune de octe\i care nu suport[ nici o con ersie ]n timpul transferului.

UNC|II ! "! "!#C$I"!%! NC$I"!%!

fopen&' (I "! )

fclose&'

Lansarea ]n execu\ie a unui program C are drept consecin\[ =i crearea ]n mod automat a trei fluxuri text standard! stdin pentru intrare" stdout pentru ie=ire =i stderr pentru ie=ire erori. (enumirile stdin" stdout" stderr sunt de fapt numele unor pointeri constan\i c[tre tipul *+L,. Celelalte fi=iere ale programului trebuie desc*ise ]n mod explicit folosind func\ia fopen&'+ care conecteaz[ un flux la un anumit fi=ier. .n aceast[ lucrare or fi considerate doar fi=iere pe disc. $rototipul func\iei fopen&' este unde!
FILE *fopen(const char *numefis, const char *mod);

Capitolul 10 Funcii pentru prelucrarea fiierelor

216

numefis este numele fi=ierului" precedat e entual de calea de acces" iar mod este un =ir de caractere care precizeaz[ modul desc/iderii. 0ariabila mod

precizeaz[ caracterul text sau binar al desc/iderii precum =i scopul desc/iderii %citire" scriere" ad[ugare" citire'scriere&. 0alorile posibile pentru mod sunt!

desc/idere fi=ier ]n mod text "r" pentru citire "w" pentru scriere "a" pentru ad[ugare "r+" pentru citire =i scriere "w+" pentru citire =i scriere "a+" pentru citire =i scriere %actualizare& prin ad[ugare la sf-r=itul fi=ierului

desc/idere fi=ier ]n mod binar 1e adaug[ la alorile ar[tate mai sus sufixul " adic[ se ob\in alorile! "r ","w ","a ","r+ ","w+ ","a+ ", pentru fiecare aloare explica\ia fiind similar[ cu cea prezentat[ la modul text.

Observa\ii. Pentru a indica explicit modul text se poate ad[uga sufixul t. De asemenea, valorile mod de tipul "r+b" sau "r+t" se pot scrie =i sub forma "rb+","rt+". .ncercarea de a desc/ide un fi=ier care nu exist[" ]n mod citire" conduce la eroare. (ac[ un fi=ier este desc/is pentru scriere ]n modul "w"("wt"sau"w "& atunci informa\ia con\inut[ ]n el a fi distrus[. (ac[ fi=ierul este desc/is pentru scriere =i nu exist[ deja un fi=ier cu acel nume" atunci el a fi creat. $entru actualizare %citire =i scriere& fi=ierul trebuie desc/is folosind caracterul 2+2 ]n cadrul modului3 ]n acest fel" dac[ nu exist[" el a fi creat" iar dac[ exist[" nu a fi distrus.

Capitolul 10 Funcii pentru prelucrarea fiierelor

217

(ac[ se desc/ide un fi=ier ]n modul !a!" datele or fi ad[ugate la sf-r=itul fi=ierului dac[ acesta deja exist[" iar dac[ nu exist[ se creeaz[ un fi=ier nou. (ac[ opera\ia de desc/idere a unui fi=ier este ] ncununat[ de succes func\ia fopen&' creeaz[ o structur[ *+L, =i ]ntoarce adresa sa. +ndicatorul de pozi\ie ia aloarea " dac[ fi=ierul este desc/is ]n modurile !r! sau !w!=i o aloare egal[ cu num[rul de octe\i ai fi=ierului" dac[ fi=ierul este desc/is ]n modul !a!. (ac[ opera\ia de desc/idere a fi=ierului nu a a ut succes %de exemplu fi=ierul nu exist[" este protejat la scriere sau discul este plin& func\ia fopen&' ]ntoarce aloarea 4)LL. Opera\ia simetric[ desc/iderii unui fi=ier" adic[ opera\ia de ,nc*idere a fi=ierului este realizat[ cu ajutorul func\iei fclose&'. ,a are urm[torul prototip!
int fclose(FILE *fp);

unde! fopen&'. Opera\ia de ]nc/idere a unui fi=ier ]nseamn[! deconectarea fluxului de fi=ier %fapt important deoarece exist[ o limitare a num[rului de fi=iere desc/ise simultan&3 golirea buferului de ie=ire ]n fi=ier %transferul pe disc a datelor aflate ]nc[ ]n bufer& dac[ fi=ierul e desc/is ]n mod scriere sau actualizare3 abandonarea datelor necitite din buferul de actualizare" dac[ fi=ierul este desc/is pentru citire sau actualizare. (ac[ opera\ia de ]nc/idere are succes func\ia ] ntoarce aloarea "" iar ]n caz contrar ,O* %macroul ,O* are ]n general aloarea -#&.
fp este pointerul returnat la apelul func\ie

Capitolul 10 Funcii pentru prelucrarea fiierelor

218

UNC|II -!N.%U CI.I%!/ (I #C%I!%!/ UNUI C/%/C.!% *unc\ia pentru citirea unui caracter dintr'un fi=ier are prototipul!
int f$etc(FILE *fp);

,c/i alent poate fi folosit[ =i func\ia getc&'. ,xisten\a celor dou[ func\ii cu acela=i efect este moti at[ de compatibilitatea cu ersiuni mai ec/i ale limbajului C. ,fectul func\iei fgetc&' este urm[torul! func\ia returneaz[ aloarea caracterului %de fapt" din moti e istorice" un ]ntreg cu octetul de rang superior egal cu zero& dac[ opera\ia a a ut succes sau ,O* c-nd s'a atins sf-r=itul fi=ierului sau are loc o eroare. *unc\ia pentru scrierea unui caracter ]ntr'un fi=ier are prototipul!
int fputc(int ch,FILE *fp);

Ca =i ]n cazul func\iei fgetc&'" exist[ o func\ie ec/i alent[ numit[ putc&'. ,fectul func\iei este urm[torul! func\ia scrie ]n fi=ier un caracter %de fapt" din moti e istorice" un ]ntreg cu octetul de rang superior zero& pe care'l returneaz[ dac[ opera\ia a a ut

succes. .n caz de eroare se a returna ,O*. Programul creeaz[ un fi=ier de caractere pe disc, av`nd numele dat ca argument ]n linia de comand[; fi=ierul va fi citit caracter cu caracter, iar caracterele diferite de cifrele zecimale 0,1,2,...,9 vor fi afi=ate.
#include "stdio.h" #include "conio.h" void main(int argc, char *argv[]) { FILE * ! char ch! i (argc"#$) {

Capitolul 10 Funcii pentru prelucrarea fiierelor

219

%rint ("&n 'umele isierului nu e %e linia de comanda")! e(it())! * +* deschiderea isierului %entru scriere *+ i ( ( # o%en(argv[)],",")) ## '-LL) { %rint ("&n Eroare la deschidere isier")! e(it())! * +* scrierea isierului *+ %rint ("&n .astati un sir de caractere" &n")! ,hile ( (ch#getchar()) "# /&n/) %utc(ch, )! close( )! +* 0eschiderea isierului %entru citire *+ i ( "( # o%en(argv[)],"r")) ) { %uts("&n 'u se %oate deschide isierul")! e(it())! * +* citirea din isier si a isarea caracterelor di erite de ci re 1ecimale *+ %rint ("&n 2irul ara ci re 1ecimale este3&n")! ,hile ( (ch# getc( )) "# E4F) { i (ch5/6/ 77 ch8/9/) %utchar(ch)! * close( )! *

UNC|II -!N.%U .%/N#F!%U (I%U%I 0% "! C/%/C.!%! O generalizare a func\iilor care acti eaz[ la ni el caracter o reprezint[ func\iile care realizeaz[ transferuri de =iruri de caractere. $rototipurile acestor func\ii se afl[ ]n fi=ierul antet stdio%h =i au urm[toarea form[!

pentru scriere ]n fi=ier


int fputs(const char *sir, FILE *fp);

Capitolul 10 Funcii pentru prelucrarea fiierelor

220

pentru citire din fi=ier


char *f$ets(char *str, int l$, FILE *fp);

Apelul acestor func\ii are urm[torul efect! *unc\ia fputs&' scrie ]n fi=ier =irul precizat la adresa sir. .n caz de succes ]ntoarce ultimul caracter scris" iar ]n caz de insucces se ]ntoarce caracterul ,O*. *unc\ia fgets&' cite=te un =ir de lungime cel mult l$-# caractere =i le transfer[ ]n =irul str. (ac[ se ] nt-lne=te un caracter newline" citirea e oprit[ iar caracterul a fi incorporat ]n str. 5irul a fi completat automat cu caracterul &'"&. .n caz de succes func\ia ] ntoarce adresa =irului str" iar ]n caz de insucces sau sf-r=it de fi=ier" se ]ntoarce aloarea 4)LL.

Se creeaz[ un fi=ier prin ad[ugare citind =iruri de la tastatur[. Se listeaz[ apoi fi=ierul ]n linii de n caractere. umele fi=ierului =i valoarea lui n se citesc de la tastatur[.
#include "stdio.h" #include "conio.h" void main(void) { int n! char ([$66],* c! char nume is[))]! FILE * ! %rint ("&n 0ati numele isierului3 ")! gets(nume is)! %rint ("&n 0ati lungimea liniilor de a isare3 ")! scan (":i",;n)! i ( ( # o%en(nume is,"a")) ## '-LL) { %rint ("&n 'u se %oate deschide isierul")! e(it())! * %rint ("&n <daugati siruri=(d+n)")! i (tolo,er(getche()) ## /d/) {

Capitolul 10 Funcii pentru prelucrarea fiierelor

221

%rint ("&n .astati siruri caractere des%artite %rin Enter,")! %rint (" %entru s arsit tastati cuvantul sto%&n")! gets(()! ,hile (strcm%((,"sto%"))

{ %uts((, )! gets(()! * close( )! +* se deschide isierul %entru citire *+ i ( ( # o%en(nume is,"r")) ## '-LL) { %rint ("&n 'u se %oate deschide isierul" ")! e(it())! * +* a isarea isierului *+ %rint ("&n Fisierul in linii de :d caractere este3&n",n)! c# gets((,n>), )! ,hile ( c) { %uts(()! c# gets((,n>), )! * close( )! * getch()! *

UNC|II ! -!N.%U .%/N#F!% CU F0%1/.+ fscanf&' (I fprintf&' O modalitate simpl[ de a realiza opera\ii de transfer cu format" este oferit[ de func\iile fprintf&' =i fscanf&'. (up[ cum sugereaz[ =i numele lor ele se comport[ la ni elul fi=ierelor exact ca func\iile scanf&' =i printf&' la ni elul consolei. (atele formatate scrise ]

Capitolul 10 Funcii pentru prelucrarea fiierelor

222

ntr'un fi=ier cu ajutorul func\iei fprintf&' pot fi examinate cu ajutorul unui editor text. $rototipurile func\iilor fscanf&' =i fprintf&' sunt urm[toarele!
int fscanf(FILE *fp,const char *sir(format); int fprintf(FILE *fp,const char *sir(format);

*unc\ia fscanf&' ]ntoarce num[rul de alori pentru care citirea" con ersia =i memorarea datelor a fost f[cut[ corect. .n cazul ]n care apare o eroare ]nainte de a se ]ncepe citirea" se returneaz[ ,O*. *unc\ia fprintf&' returneaz[ num[rul de caractere scrise efecti sau o aloare negati [ ]n caz de insucces. Programul creeaz[ fi=ierul formatat pe disc av`nd numele formtext cuprinz`nd numele, prenumele =i nota la examen pentru studen!ii unei grupe. Pentru verificarea corectitudinii informa!iei din fi=ier, con!inutul acestuia se afi=eaz[ pe ecran.
#include "stdio.h" #include "conio.h" #include "string.h" void main(void) { FILE * ! int n,i! t?%ede struct catalog { char nume[)@]! char %renume[$6]! short nota! *struc! struc (! i ( "( # o%en("gru%a",",")) ) { %rint ("&n 'u se %oate deschide isierul")! e(it())! * %rint ("&n Introduceti numarul de studenti din gru%a

Capitolul 10 Funcii pentru prelucrarea fiierelor

223

")! scan (":i",;n)! +* citirea de la tastatura si scrierea in isier *+ or (i#6!i5n!i>>) { %rint ("&n 'ume student#")!scan (":s",(.nume)! %rint ("&n Arenume student#")! scan (":s",(.%renume)! %rint ("&n 'ota#")!scan (":i",;(.nota)! %rint ( ,":s :s :i",(.nume,(.%renume,(.nota)! * close( )!

( "( # o%en("gru%a","r")) ) { %rint ("&n 'u se %oate deschide e(it())! *

isierul"")!

+* a isarea %e ecran a continutului isierului *+ %rint ("&n Bontinutul isierului este3&n")! or (i#6!i5n!i>>) { scan ( ,":s :s :i",(.nume,(.%renume,;(.nota)! %rint ("&n:s :s :i",(.nume,(.%renume,(.nota)! * getch()! *

Observa\ie. "unc!ia de citire scanf() este ec#ivalent[ cu fscanf(stdin, ... ), iar func!ia de scriere printf() cu fprintf (stdout, ... ). UNC|II ! fread&' (I fwrite&' -!N.%U .%/N#F!%U 2 0CU%I 0% "! "/.! .n ciuda a antajelor e idente" transferul cu format al datelor este mai lent dec-t transferul datelor sub forma binar[ datorit[ con ersiilor ]n format A1C++. (e asemenea" ]n general" fi=ierul creat cu date A1C++

Capitolul 10 Funcii pentru prelucrarea fiierelor

224

formatate folose=te memorie mai mult[ dec-t un fi=ier binar. O modalitate eficient[ pentru transferul unui olum mare de date o reprezint[ folosirea func\iilor fread&' =i fwrite&'. $rototipurile acestor func\ii sunt!
si)e(t fread(void * uf, si)e(t nr(oct, si)e(t n , FILE *fp); si)e(t fwrite(const void * uf, si)e(t nr(oct, si)e(t n , FILE *fp);

6ipul de date si)e(t este definit ]n !stdio%h! =i aici are semnifica\ia unui ]ntreg f[r[ semn. *unc\ia fread&' cite=te din fi=ierul asociat pointerului fp" n blocuri" fiecare bloc a -nd lungimea nr(oct octe\i =i le transfer[ ]n zona de memorie indicat[ de pointerul uf. 0aloarea ]ntoars[ de func\ia fread&' este num[rul de blocuri citite efecti . (ac[ s'a ajuns la sf-r=itul fi=ierului sau dac[ a inter enit o eroare aceast[ aloare este strict mai mic[ dec-t n . *unc\ia fwrite&' scrie ]n fi=ierul asociat pointerului fp" din zona indicat[ de pointerul uf" n blocuri" fiecare bloc a -nd lungimea egal[ cu nr(octeti. 0aloarea ]ntoars[ de func\ia fwrite&' este egal[ cu num[rul de blocuri scrise efecti 3 ea a fi mai mic[ dec-t n dac[ la scriere inter ine o eroare.

UNC|I/

feof&'

Capitolul 10 Funcii pentru prelucrarea fiierelor

225

*unc\ia feof&' permite determinarea momentului c-nd a fost ]nt-lnit sf-r=itul fi=ierului. Acest lucru este util deoarece ]n anumite situa\ii returnarea alorii ,O* poate a ea =i alte cauze. Astfel" s'a [zut c[ func\ia fgetc&' returneaz[ ,O* at-t la ]nt-lnirea sf-r=itului de fi=ier c-t =i ]n caz de eroare. (e asemenea" ]n cazul citirii dintr'un fi=ier binar este posibil ca aloarea ,O* s[ fie returnat[ ]n mod natural indic-ndu'se ]n mod eronat sf-r=it de fi=ier sau eroare. $rototipul func\iei feof&' este! *unc\ia ]ntoarce aloarea adev3rat % aloare diferit[ de zero&" dac[ s'a ]nt-lnit sf-r=itul fi=ierului =i aloarea fals %egal[ cu zero& dac[ nu s'a ]nt-lnit sf-r=itul fi=ierului. *unc\ia feof&' se poate folosi at-t la fi=iere binare c-t =i la fi=iere text.
int feof(FILE *fp);

UNC|I/

rewind&'

*unc\ia rewind&' pozi\ioneaz[ indicatorul de pozi\ie al fi=ierului la ]nceputul fi=ierului. $rototipul s[u este!
void rewind(FILE *fp);

4!1- U "! -%05%/1 C/%! U.I I6!/67 FUNC| II !8 fread&'+ fwrite&'+ feof&'+ rewind&' $rogramul de mai jos creeaz[ un fi=ier cu n ] nregistr[ri" al c[rui nume este dat pe linia de comand[. (up[ ce indicatorul de pozi\ie este adus la ]nceputul fi=ierului cu ajutorul func\iei rewind&'+ con\inutul ]

Capitolul 10 Funcii pentru prelucrarea fiierelor

226

nregistr[rilor este citit =i afi=at pe ecran. 0aloarea n se cite=te de la tastatur[. $xemplu de program care utilizeaz[ func!iile% fread(), fwrite(), feof(), rewind()
#include "stdio.h" #include "conio.h" void main(int argc, char * argv[]) { FILE * ! int i,n! t?%ede { struct catalog

char nume[$6]! char %renume[$@]! short nota! *struc! struc (! i (argc"#$) { %rint ("&n 'u ati dat numele isierului"")! e(it())! * i ( "( # o%en(argv[)],",>C")) ) { %rint ("&n 'u se %oate deschide isierul"")! e(it())! * %rint ("&n 0ati va rog numarul de inregistrari3 ")! scan (":i",;n)!

+* crearea isierului *+ or (i#6!i5n!i>>) { %rint ("&n 'ume#")! scan (":s",(.nume)! %rint ("&n Arenume#")! scan (":s",(.%renume)! %rint ("&n 'ota#")! scan (":i",;(.nota)! i ( ,rite(;(,si1eo ((),), ) "# )) { %rint ("&n Eroare la scriere")! e(it())!

Capitolul 10 Funcii pentru prelucrarea fiierelor

227

* * +* aducerea indicatorului de %o1itie la valoarea 6 *+ re,ind( )! +* a isarea continutului isierului *+ or (i#6!i5n!i>>) i ( read(;(,si1eo ((),), ) "# )) { i eo ( ) CreaD! %rint ("&n Eroare la citire")! * else %rint ("&n 'ume#:s Arenume#:s 'ota#:i", (.nume,(.%renume,(.nota)! close( )! *

UNC|II -!N.%U CI.I%!/ (I 10"IFIC/%!/ IN"IC/.0%U UI "! -06I|I! / FI(I!%U UI8 fsee9&'+ fgetpos&'+ fsetpos&'+ ftell&' $e l-ng[ func\ia rewind&' deja prezentat[" standardul A41+ C cuprinde urm[toarele func\ii care pot fi folosite ]n prelucrarea fi=ierelor! fsee9&'" fgetpos&' " fsetpos&'" ftell&'. *unc\ia fsee9&' are prototipul!
int fsee*(FILE *fp, lon$ nr(octeti, int ori$ine);

,fectul func\iei este pozi\ionarea indicatorului de pozi\ie al fi=ierului asociat pointerului fp" la aloarea specificat[ de ori$ine la care se adaug[ deplasarea egal[ cu nr(octeti. 0aloarea pentru ori$ine trebuie s[ fie unul din urm[toarele nume de macrocomand3 definite ]n fi=ierul stdio%h! nume
+EE,(+E-

semnifica\ie ]nceputul

Capitolul 10 Funcii pentru prelucrarea fiierelor

228

+EE,(./0 +EE,(E12

fi=ierului pozi\ia curent[ sf-r=itul fi=ierului

.n cazul ]n care opera\ia de pozi\ionare reu=e=te" func\ia returneaz[ "" iar ]n caz de insucces o aloare diferit[ de ". *unc\ia fgetpos&' are prototipul!
int f$etpos(FILE *fp, fpos(t *po));

=i are ca efect memorarea alorii curente a indicatorului de pozi\ie ]n obiectul indicat de po). .n caz de eroare func\ia returneaz[ o aloare diferit[ de "" iar ]n caz contrar aloarea ". 6ipul fpos(t e definit ]n stdio%h ca t3pedef lon$ fpos(t. *unc\ia fsetpos&' are prototipul!
int fsetpos(FILE *fp,const lon$ int *po));

Apelul are urm[torul efect! indicatorul de pozi\ie a primi aloarea memorat[ ]n obiectul indicat de po). Aceast[ aloare trebuie s[ fie ob\inut[ anterior printr'un apel f$etpos(). .n caz de succes func\ia returneaz[ aloarea " iar ]n caz contrar o aloare diferit[ de ". *unc\ia ftell&' are prototipul!
lon$ int ftell(FILE *fp);

,a returneaz[ aloarea curent[ a indicatorului de pozi\ie al fi=ierului asociat pointerului fp. .n caz de eroare aloare returnat[ este "" iar dac[ fluxul nu este asociat unui dispoziti care s[ permit[ c[ut[ri aleatoare" aloarea returnat[ este nedefinit[. Programul permite pozi!ionarea pe o ]nregistrare a

Capitolul 10 Funcii pentru prelucrarea fiierelor

229

fi=ierului construit cu programul de la Exemplul 10.4; ]n func!ie de op!iunea utilizatorului se modific[ sau nu nota ]nregistr[rii.
#include "stdio.h" #include "conio.h" void main(void) { char nume is[E]! long int *%! int D! FILE * ! t?%ede { struct catalog

char nume[$6]! char %ren[$@]! short nota! *struc! struc (! %rint ("&n'ume isier #")! scan (":s",nume is)! # o%en(nume is,"r>C")! %rint ("&n 0ati va rog numarul inregistrarii ")! scan (":d",;D)! seeD( ,6,2EEFGE'0)! i ( )5#D ;; si1eo (struc)*(DH)) 5 tell( ) ) { seeD( ,si1eo (struc)*(DH)),2EEFG2E.)! read(;(,si1eo (struc),), )! %rint ("&n Inregistrarea :i este3&n",D)! %rint ("&n 'ume#:s,Arenume#:s,'ota#:d",(.nume,(.%ren, (.nota)! %rint ("&n 0oriti modi icarea notei =(d+n)")! i (tou%%er(getche())##/0/) { %rint ("&n'ota noua este#")! scan (":d",;(.nota)! get%os( ,%)! *%H#si1eo (struc)! set%os( ,%)! ,rite(;(,si1eo (struc),), )! * *

Capitolul 10 Funcii pentru prelucrarea fiierelor

230

else %rint ("&nInregistrarea nu este in isier"")! %rint ("&n Inregistrarile din isier sunt3&n")! seeD( ,6,2EEFG2E.)! ,hile( " eo ( ) ) { read(;(,si1eo (struc),), )! i ( " eo ( ) ) %rint ("&n'ume#:s Arenume#:s 'ota#:d", (.nume,(.%ren,(.nota)! * close( )! getch()! *

6,16, (, CO467OL :;<: 1unt ini\ializate ]ntotdeauna cu aloarea " a& ariabilele locale =i globale declarate static =i neini\ializate explicit b& ariabilele locale neini\ializate explicit :;<= .n C opera\iile de intrare/ie=ire se realizeaz[ cu ajutorul a& unor instruc\iuni speciale b& unor func\ii speciale din biblioteca standard :;<> *luxul %streamul& a& este un dispoziti logic de interfa\[" care asigur[ generalitatea func\iilor de intrare/ie=ire fa\[ de di ersitatea dispoziti elor fizice specifice acestor opera\ii b& se reprezint[ printr'o entitate de tip *+L, c& poate fi de dou[ tipuri! text sau binar :;<? *i=ierul desc/is ]n mod !w! a& a fi creat dac[ nu exist[ b& a pierde informa\iile dac[ exist[ deja

Capitolul 10 Funcii pentru prelucrarea fiierelor

231

c& a putea fi completat cu noi informa\ii dac[ exist[ deja :;<@ *i=ierul desc/is ]n mod !a! a& se creeaz[ dac[ nu exist[ b& permite ad[ugarea de date la sf-r=itul s[u dac[ exist[ deja c& a pierde informa\iile dac[ exist[ deja :;<A $entru citirea unui caracter dintr'un fi=ier de pe disc se poate folosi func\ia a& fgetc&' b& getc*&' c& getc&' :;<B Apelurile de func\ii =i
f$etc(stdin); $etch();

a& au acela=i efect! ambele citesc un caracter de la tastatur[ b& au efecte diferite :;<C $entru scrierea unui caracter ]ntr'un fi=ier pe disc se poate folosi func\ia a& fputc&' b& putc&' c& putc*&' :;<D Apelurile de func\ii =i
fputc(stdout,nume(caracter); putch(nume(caracter);

a& au acela=i efect! ambele afi=eaz[ un caracter pe monitor b& au efecte diferite :;<:; $entru citirea unui =ir de caractere dintr'un fi=ier creat pe disc se poate folosi func\ia

Capitolul 10 Funcii pentru prelucrarea fiierelor

232

a& fgets&' b& gets&' :;<:: $entru scrierea unui =ir de caractere ]ntr'un fi=ier creat pe disc se poate folosi func\ia a& puts&' b& fputs&' :;<:= Apelurile de func\ii =i
f$ets(nume(sir,nr(caractere,stdin); $ets(nume(sir);

a& au acela=i efect! ambele citesc un =ir de caractere de la tastatur[ b& au efecte diferite :;<:> *unc\iile fprintf&' =i fscanf&' a& transfer[ blocuri de date b& transfer[ date formatate :;<:? Care afirma\ie de mai jos este ade [rat[8 a& apelul apelul b& apelul apelul fscanf&stdin+ <<<' are acela=i efect cu scanf&' fprintf&stdout+ <<<' are acela=i efect cu printf&'

:;<:@ $entru transferul unui olum mare de date este recomandabil[ folosirea func\iilor a& fread&' =i fwrite&' b& fscanf&' =i fprintf&' :;<:A *unc\ia feof&'
a& b&

]ntoarce aloarea adevarat dac[ nu s'a atins sf-r=itul fi=ierului =i fals ]n caz contrar ]ntorce aloarea fals dac[ nu s'a atins sf-r=itul fi=ierului =i adevarat ]n caz contrar

:;<:B *unc\ia rewind&' pozi\ioneaz[ indicatorul de pozi\ie al fi=ierului a& la ]nceputul s[u

Capitolul 10 Funcii pentru prelucrarea fiierelor

233

b& la sf-r=itul s[u :;<:C *unc\ia fsee9&' a& pozi\ioneaz[ indicatorul de pozi\ie al fi=ierului la o aloare calculat[ relati fa\[ de una din alorile de referin\[! ]nceputul fi=ierului" sf-r=itul fi=ierului" pozi\ia curent[ ]n fi=ier b& seteaz[ aloarea indicatorului de pozi\ie la o aloare dat[ c& memoreaz[ aloarea indicatorului de pozi\ie ] ntr'un obiect din memorie :;<:D Care afirma\ii sunt ade [rate8 a& func\ia fgetpos&' seteaz[ aloarea indicatorului de pozi\ie la o aloare dat[ b& func\ia fsetpos&' memoreaz[ aloarea indicatorului de pozi\ie ]ntr'un obiect din memorie c& afirma\iile # =i 4 sunt false d& func\ia ftell&' ]ntoarce aloarea curent[ a indicatorului de pozi\ie &'SP( S(&) 9:.9'a 9:.;'b 9:.<'a" b" 9:.>'a" b 9:.?'a" c 9:.@'a 9:.A'a" b 9:.99'b 9:.9;'a 9:.9<'b 9:.9?'b 9:.9@'a 9:.9A'a c 9:.B'a 9:.9='a" b 9:.9B'c" d 9:.='a" b 9:.9:'a 9:.9>'a

S-ar putea să vă placă și

  • Instructiuni Instalare
    Instructiuni Instalare
    Document2 pagini
    Instructiuni Instalare
    Barosz
    Încă nu există evaluări
  • Tipuri de Traductoare
    Tipuri de Traductoare
    Document20 pagini
    Tipuri de Traductoare
    alexandra_dutescu
    100% (2)
  • Sub
    Sub
    Document3 pagini
    Sub
    Barosz
    Încă nu există evaluări
  • Versiondog CH
    Versiondog CH
    Document7 pagini
    Versiondog CH
    Barosz
    Încă nu există evaluări
  • Sesiune Examene-1
    Sesiune Examene-1
    Document1 pagină
    Sesiune Examene-1
    Barosz
    Încă nu există evaluări
  • Sub
    Sub
    Document3 pagini
    Sub
    Barosz
    Încă nu există evaluări
  • Versiondog - AP - Ro
    Versiondog - AP - Ro
    Document27 pagini
    Versiondog - AP - Ro
    Barosz
    Încă nu există evaluări
  • Plante
    Plante
    Document1 pagină
    Plante
    Barosz
    Încă nu există evaluări
  • Capitol Ul 13
    Capitol Ul 13
    Document17 pagini
    Capitol Ul 13
    Barosz
    Încă nu există evaluări
  • ADA Layout Manual
    ADA Layout Manual
    Document8 pagini
    ADA Layout Manual
    Annemarie Hansen
    Încă nu există evaluări
  • Adresgfha Service Samsung
    Adresgfha Service Samsung
    Document1 pagină
    Adresgfha Service Samsung
    Barosz
    Încă nu există evaluări
  • Functionare Turbosuflanta
    Functionare Turbosuflanta
    Document3 pagini
    Functionare Turbosuflanta
    Alex
    Încă nu există evaluări
  • Capitol Ul 12
    Capitol Ul 12
    Document17 pagini
    Capitol Ul 12
    Barosz
    Încă nu există evaluări
  • Capitol Ul 11
    Capitol Ul 11
    Document14 pagini
    Capitol Ul 11
    Barosz
    Încă nu există evaluări
  • Capitol Ul 6
    Capitol Ul 6
    Document18 pagini
    Capitol Ul 6
    Barosz
    Încă nu există evaluări
  • Capitol Ul 4
    Capitol Ul 4
    Document38 pagini
    Capitol Ul 4
    Barosz
    Încă nu există evaluări
  • Capitol Ul 7
    Capitol Ul 7
    Document26 pagini
    Capitol Ul 7
    Barosz
    Încă nu există evaluări
  • Capitol Ul 8
    Capitol Ul 8
    Document51 pagini
    Capitol Ul 8
    Barosz
    Încă nu există evaluări
  • Capitol Ul 9
    Capitol Ul 9
    Document13 pagini
    Capitol Ul 9
    Barosz
    Încă nu există evaluări
  • Capitol Ul 5
    Capitol Ul 5
    Document16 pagini
    Capitol Ul 5
    Barosz
    Încă nu există evaluări
  • Capitol Ul 1
    Capitol Ul 1
    Document8 pagini
    Capitol Ul 1
    Barosz
    Încă nu există evaluări
  • Capitol Ul 3
    Capitol Ul 3
    Document43 pagini
    Capitol Ul 3
    Barosz
    Încă nu există evaluări
  • Capitol Ul 2
    Capitol Ul 2
    Document13 pagini
    Capitol Ul 2
    Barosz
    Încă nu există evaluări
  • Capitolul 3
    Capitolul 3
    Document21 pagini
    Capitolul 3
    baratkyy5555
    100% (1)
  • Capitolul 1 - Cibernetica
    Capitolul 1 - Cibernetica
    Document36 pagini
    Capitolul 1 - Cibernetica
    alexandru_roman_9
    Încă nu există evaluări
  • Capitolul 4 ISSC
    Capitolul 4 ISSC
    Document15 pagini
    Capitolul 4 ISSC
    Barosz
    Încă nu există evaluări
  • Teorie Masurare Debite
    Teorie Masurare Debite
    Document38 pagini
    Teorie Masurare Debite
    Razvan Preda
    Încă nu există evaluări
  • Reprez Grafica
    Reprez Grafica
    Document1 pagină
    Reprez Grafica
    Barosz
    Încă nu există evaluări
  • Mat A
    Mat A
    Document1 pagină
    Mat A
    Barosz
    Încă nu există evaluări