Frage zu Zeiger/ Dateistream

OP (Firma: my-solution) #675372
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.
Gast #675485
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 ;)
OP (Firma: my-solution) #675590
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 
:-)!
Gast #676362
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren