Forum: PC-Programmierung In eine Datei schreiben und aus ihr lesen.


von filla (Gast)


Lesenswert?

Hallo,

ich habe ein Problem, wobei ich mir auch beim Prinzipm, wie es zu lösen 
ist, nicht sicher bin.

Ein Programm schreibt konstant Zeile für Zeile Daten mit fprintf in eine 
Datei A.

Ab einem bestimmten Punkt Sollen alle Zeilen der Datei A über Netzwerk, 
gelesen werden und in eine Datei B auf dem anderen PC geschrieben 
werden.
Das konstante dazuschreiben von Daten in A geht aber weiter.

Wenn alle Daten übertragen sind (also kopiert) sollen die Daten direkt 
an B gesendet werden. Dabei sollte keine Zeile verloren gehen?

Hat jemand einen logischen Ansatz, wie das Problem zu lösen ist? Ich 
müsste ja immer mit fseek den Curser verschieben, weil ich nicht alle 
Daten auf einmal lesen und wegkopieren kann weil das schreiben immer 
weitergeht.

Grüße,
filla

von Bernhard M. (boregard)


Lesenswert?

wie wärs mit zweimal öffnen, einmal zum Schreiben und einmal zum Lesen, 
gibt 2 Filehandles mit unterschiedlichen Schreib- Lesepositionen....

von STK500-Besitzer (Gast)


Lesenswert?

>Hat jemand einen logischen Ansatz, wie das Problem zu lösen ist? Ich
>müsste ja immer mit fseek den Curser verschieben, weil ich nicht alle
>Daten auf einmal lesen und wegkopieren kann weil das schreiben immer
>weitergeht.

Das klingt irgendwie nach einer Art Ringpuffer, wobei es sich ja nicht 
um einen Ring handelt.
Du musst dir doch nur die Lese- und die Schreibposition merken. Die 
Operationen zuum Lesen und Schreiben dürfen sich nicht in die Quere 
kommen. Ansonsten ist das Problem (aus meiner Sicht) ziemlich trivial...
Der "Abstand" zwischen der Schreib- und der LEse-Adresse beschreibt ja 
die Datenmenge, die noch nicht verschickt wurde.
Soll die Datei A immer weiter wachsen?
Sonst könnte man sie ja auf eine bestimmte Größe begrenzen (Datensätze 
zählen) und sobald de Grenze erreicht wurde, eine neue zum Schreiben 
öffnen, und die bis jetzt erstellt verschicken...

von Sven P. (Gast)


Lesenswert?

Übertrag von Anfang an alle Zeilen und verzögere die Ausleserei (Puffer) 
auf der Empfängerseite. Vermutlich bekommste sowas schon mit "tee" und 
"netcat" sowie nem FIFO hin, so in der Art:
1
-- Server-Seite --
2
# touch daten.txt
3
# netcat -l -p 65000 > daten.txt &
Jezt kannste aus "daten.txt" lesen.

1
-- Client-Seite --
2
# mkfifo daten
3
# cat daten | tee protokoll.txt | netcat 192.168.2.5
Wenn nun Daten in den Fifo "daten" geschrieben werden, landen sie in 
"protokoll.txt" und gleichzeitig über Netzwerk in "daten.txt".

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.