In eine Datei schreiben und aus ihr lesen.

Gast #1018121
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
Gast #1018447
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...
Gast #1018469
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".

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