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


Anmelden zum Antworten