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
wie wärs mit zweimal öffnen, einmal zum Schreiben und einmal zum Lesen, gibt 2 Filehandles mit unterschiedlichen Schreib- Lesepositionen....
>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...
Ü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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.