Pipes & Struktur
-
Hallo zusammen!
Kann ich in eine Pipe mehrere Daten hintereinander schreiben, ohne dass ich dabei die Daten, die ich vorher geschrieben habe, überschreibe?
Mein Problem ist, ich habe eine Textdatei, in der Daten für eine Struktur stehen, jeweils 3 Zeilen gehören zusammen....
Textdatei "Daten.txt":
Muster Max 54 Bauer Bernd 76
Die Struktur sieht so aus:
typedef struct { char Nachname[20]; char Vorname[20]; int Alter; } DATEN;
Nun möchte ich alle Personen aus der Textdatei in die Pipe schreiben und danach wieder auslesen.
Wenn ich folgendes schreibe:
DATEN d; scanf("%s",d.Nachname); scanf("%s",d.Vorname); scanf("%d",&d.Alter); write(myPipe, &d, sizeof(DATEN));
werden ja nur die ersten 3 Zeilen aus der Textdatei eingelesen und in die Pipe geschrieben.
(Aufruf: uebung < Daten.txt)Wie schaffe ich es, dass alle Personen, die in der Textdatei stehen, eingelesen und in die Pipe geschrieben werden?
Gruss
Charadin
-
schonmal mit einer Schleife probiert?
-
ja, daran habe ich schon gedacht, aber wenn ich das Programm so aufrufe:
uebung < Daten.txt
wie formuliere ich dann "solange in der Textdatei was steht, schreibe es in die Struktur"
Ich habe es mir so gedacht:
while(...) // wie muss hier die Bedingung lauten? { scanf("%s",d.Nachname); scanf("%s",d.Vorname); scanf("%d",&d.Alter); write(myPipe, &d, sizeof(DATEN)); }
Aber wie schaut es dann mit der Pipe aus? Kann ich da überhaupt mehrmals hintereinander was reinschreiben oder wird der vorherige Inhalt dann überschrieben?
-
Wenn das Dateiende erreicht wird von Daten.txt, dann liefern Funktionen zum Einlesen (wie auch scanf()) 0 zurück (--> Schleifenende). Wie hast du myPipe geöffnet?
-
Hallo AJ!
Danke für Deine Antwort, bin mittlerweile draufgekommen, wie das mit der Schleife funktioniert...
while(scanf("%s %s %d", d.Nachname, d.Vorname, &d.Alter) != EOF) ...
Gruss
Charadin