[ Gorex @ 26.05.2013. 20:56 ] @

Ja bih molio ljude koji znaju da mi objasne sto pokazivac, kad uzme "adresu" od fopen("podaci.txt","w"); ne prikazuje na izlazu istu adresu, nego prikazuje adresu uvecanu za 96 bajta. Do sad nisam radio sa datotekama, radio sam sa strukturama i uvek kad sam radio sa pokazivacima, radio sam tako sto predam adresu neke promenljive, niza ili strukture pokazivacu itd.. Ali ovde ne znam sta se desava... I zbog cega se radi sa pokazivacima? Unapred hvala...

FILE *f=fopen("podaci.txt","w");

// printf("%d,%d" ,fopen("podaci.txt","r"),f );
[ Goran Rakić @ 26.05.2013. 21:02 ] @
Ako znaš da je FILE struktura definisana u zaglavlju stdio.h, i da fopen() unutar funkcije alocira takvu jednu strukturu, popuni njena polja i vrati pokazivač na nju, da li su stvari jasnije?

Citat:

Upon successful completion fopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error.

FILE is a structure containing information about a file.
[ X Files @ 26.05.2013. 21:20 ] @
Ako sam dobro shvatio pitanje:
Citat:

FILE *f=fopen("podaci.txt","w");
// printf("%d,%d" ,fopen("podaci.txt","r"),f );

... tebe zanima zašto ovo dvoje obojeno crvenom bojom NEMA ISTU vrednost prilikom ispisa, a očekivano je da jeste isto jer je "f=fopen()".

Zato što ta dva fopen()-a nisu ista stvar... Svako novo otvaranje fajl streama je NOVO otvaranje, nije ISTO otvaranje :)


Pokušaj ovo:
Code:

FILE *f=fopen("podaci.txt","w");
printf("%d,%d,%d" , fopen("podaci.txt","r"), fopen("podaci.txt","r"), f );

... trebalo bi da su sve tri vrednosti različite.
[ Gorex @ 26.05.2013. 22:05 ] @
Pa i nisu bas najjasnije :D Znam da je FILE struktura koja je defiisana u zaglavlju <stdio.h> , ali ne znam da li sam te dobro razumeo ovo posle sto si napisao. Jel sama funkcija fopen() alocira jednu takvu strukturu i kako to vrati pokazivac, ako moze malo detaljnije. Hvala...


Citat:
Goran Rakić:
Ako znaš da je FILE struktura definisana u zaglavlju stdio.h, i da fopen() unutar funkcije alocira takvu jednu strukturu, popuni njena polja i vrati pokazivač na nju, da li su stvari jasnije?

Citat:

Upon successful completion fopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error.

FILE is a structure containing information about a file.


Dobro si shvatio pitanje :D

Citat:
X Files: Ako sam dobro shvatio pitanje:

... tebe zanima zašto ovo dvoje obojeno crvenom bojom NEMA ISTU vrednost prilikom ispisa, a očekivano je da jeste isto jer je "f=fopen()".

Zato što ta dva fopen()-a nisu ista stvar... Svako novo otvaranje fajl streama je NOVO otvaranje, nije ISTO otvaranje :)



[ Burgos @ 26.05.2013. 22:55 ] @
Prvi put kada pozoveš fopen, dobiješ jednu strukturu. Kada drugi put pozoveš fopen dobiješ drugu strukturu, i tako za svaki fajl.

Ti ovde ne uzimaš adresu fopen funkcije:

Code:
printf("%d,%d" ,fopen("podaci.txt","r"),f );


već ispisuješ vrednost onoga što ti fopen vrati.

Za svaki otvoreni fajl, alocira se nova struktura na nekom novom mestu i vrati se pokazivač na nju.
[ Gorex @ 27.05.2013. 18:03 ] @

Ja koliko sam procitao da ukoliko funkcija otvori datoteku, vrati ce adresu strukture pokazivacu, a ako je pokazivac NULL onda otvaranje nije uspelo ili nema te datoteke na disku...

Ako fopen alocira strukturu u memoriji onda bi trebalo da je struktura tipa FILE, posto je i pokazivac, pokazivac na strukturu tipa FILE, dal sam u pravu? :D


Citat:
Burgos: Prvi put kada pozoveš fopen, dobiješ jednu strukturu. Kada drugi put pozoveš fopen dobiješ drugu strukturu, i tako za svaki fajl.

Ti ovde ne uzimaš adresu fopen funkcije:

Code:
printf("%d,%d" ,fopen("podaci.txt","r"),f );


već ispisuješ vrednost onoga što ti fopen vrati.

Za svaki otvoreni fajl, alocira se nova struktura na nekom novom mestu i vrati se pokazivač na nju.