Forum: Compiler & IDEs Frage zu Zeiger/ Dateistream


von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Hallo, ich hab noch mal ne kurze Frage zu Zeigern. Wenn ich einen schon 
vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem 
gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte 
nicht verändert, also die Adresse in ihm. Wieso fuktioniert das bve 
FILE-Zeigern nicht, wenn ich genau so verfahre und zum Bsp. einen Zeiger 
an fgetc(FILE *) übergebe, dann funktioniert das wie gewollt, doch wenn 
ich fgetc noch mal mit einem anderen Zeiger, der auf die gleiche Datei 
zeigt ausführen will, so klappts nicht ohne rewind. Ich würd nur genr 
wissen, wo mein Verständnisproblem ist, danke schon mal!!!
Bis dann.

von holger (Gast)


Lesenswert?

Der FILE Zeiger ist sicher ein Zeiger auf eine Struktur.
Dadurch das du den Zeiger kopierst bekommst du
keine Kopie dieser Struktur. In der Struktur
wird die Dateiposition gespeichert. Ob du nun
mit Zeiger A auf die Datei zugreifst oder mit Zeiger B,
die Dateiposition für Zeiger A UND für Zeiger B wird gleichzeitig
verändert weil du keine Kopie der Struktur hast, sondern nur
zwei Zeiger auf EINE Struktur.

Das müsste so ungefähr hinkommen ;)

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Also C von A bis Z von Galileocomputing sagt folgendes: "...Der 
FILE-Zeiger – es wird ja auch von einem FILE-Stream gesprochen – ist 
eine Struktur, die in der Headerdatei <stdio.h> deklariert ist. Diese 
Struktur beinhaltet alle Informationen, die für die höheren 
Datei-E/A-Funktionen benötigt werden, beispielsweise:
gp    den Puffer – die Anfangsadresse, den aktuellen Zeiger, die Größe
gp    den File-Deskriptor (mehr dazu bei den Funktionen der niedrigeren 
Ebene)
gp    die Position von Schreib-oder Lesezeiger
gp    die Fehler- und EOF-Flags
...", Also scheint deine Erklärung zu stimmen! Danke, wieder was gelernt 
:-)!

von Bobby (Gast)


Lesenswert?

Da hat der Gali aber was verwechselt:

Der FILE Pointer ist keine Struktur,
sondern ein Zeiger auf eine Struktur vom Typ FILE.

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Stimmt, is mir gar nich aufgefallen, dann sollte man das dem Gali 
vielleicht mal mitteilen....

von Rolf Magnus (Gast)


Lesenswert?

Eigentlich sollte einen gar nicht interessieren, was FILE ist. In der 
Regel wird's wohl eine Struktur sein, da das eine sinnvolle 
Implementation ist, aber generell ist es einfach irgendein Datentyp, der 
von den File-Funktionen intern genutzt wird. Man muß eigentlich nur 
wissen, daß open einen Zeiger darauf zurückliefert und man an alle 
anderen File-Funktionen diesen übergeben muß.

> Hallo, ich hab noch mal ne kurze Frage zu Zeigern.Wenn ich einen schon
> vorhandenen einem andern übergebe, dann ist doch die Adresse in diesem
> gespeichert und wenn ich den neuen Zeiger manipuliere, so wird der alte
> nicht verändert, also die Adresse in ihm.

Genau.

> Wieso fuktioniert das bve FILE-Zeigern nicht, wenn ich genau so
> verfahre und zum Bsp. einen Zeiger an fgetc(FILE *) übergebe, dann
> funktioniert das wie gewollt, doch wenn ich fgetc noch mal mit einem
> anderen Zeiger, der auf die gleiche Datei zeigt ausführen will, so
> klappts nicht ohne rewind.

Wo ist denn da der Unterschied? Ein Zeiger auf int verhält sich doch 
genauso. Wenn ich den kopiere, dann über das Original den int verändere, 
sehe ich auch über den anderen Zeiger den veränderten int-Wert und nicht 
den von vor der Kopieraktion.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.