[struct] verkettete Listen speichern?



  • Hi,

    ich schreibe an einem Terminverwaltungsprogramm (nichts besonderes).
    Nun möchte ich, dass ich flexibel viele Termine erstellen kann.
    Danach soll es in eine Datei geschrieben werden die bei jedem Start des Programms eingelesen wird.
    Hier habe ich etwas dazu gelesen aber da wird eben nichts gespeichert.

    http://www.guardian-online.de/c-kurs/pointer_eins/ev_listen.htm

    Mein struct sieht so aus.

    struct rem {
        struct tm calender;
        char heading[MAX1];
        char description[MAX2];
        char sdate[MAX2];
        char ldate[MAX2];
        time_t sdate_s;
        time_t ldate_s;
        struct rem *next;
    };
    

    für *next wird immer mit malloc Speicher geholt.
    Aber wie kann ich das ganze Speichern?
    Wenn ich:

    write(datei, &first_, sizeof( *first_ )
    

    Wird dann alles in die Datei "datei" geschrieben also auch alle Termine die mit *next verknüpft sind?

    lg, ~hanshiro



  • ~hanshiro schrieb:

    write(datei, &first_, sizeof( *first_ )
    

    Wird dann alles in die Datei "datei" geschrieben also auch alle Termine die mit *next verknüpft sind?

    Nein.

    greetz, Swordfish



  • ~hanshiro schrieb:

    write(datei, &first_, sizeof( *first_ )
    

    Wird dann alles in die Datei "datei" geschrieben also auch alle Termine die mit *next verknüpft sind?

    lg, ~hanshiro

    wie Swordfish schrieb, nein :P.
    du musst durch die komplette verkettete liste traversieren und element für element speichern. im grunde genau so, wie wenn du ein bestimmtes element in der liste suchst. nur das die suchbedingung nun immer wahr sein muss. dann schreibst du element für element in eine datei. umgekehrt funktioniert natürlich auch das laden. nachdem du mit malloc ein element alloziert hast, liest du aus der datei und initialisierst mit den gelesenen daten die elementstruktur.



  • Okay, habe ich soweit verstanden.
    Was eignet sich für ein solches Vorhaben besser?
    Die lowlevel Funktionen oder die höheren?



  • ~hanshiro schrieb:

    Okay, habe ich soweit verstanden.
    Was eignet sich für ein solches Vorhaben besser?
    Die lowlevel Funktionen oder die höheren?

    da du malloc() benutzt gehe ich davon aus, dass du in reinem C programmierst.
    dann bietet sich natürlich ein write() an.
    falls du allerdings meinst wie du traverse(), search_element() und remove_element() funktionen implementieren sollst, dann empfehle ich sich wirklich nur auf libc funktionen zu beschränken.
    verkettete listen sind sowieso schon langsam genug, dies muss man nicht
    noch durch übertriebene klassenimplementationen verstärken.



  • Ja genau mein C-Wissen (wenn man das überhaupt so nennen kann) bezieht sich aus C von A-Z von Jürgen Wolf was sich ja auf ANSI-C bezieht ich kenne auch von den angesprochenen nur write.
    Werde es dann mal damit probieren.

    Vielen Dank!



  • ~hanshiro schrieb:

    Ja genau mein C-Wissen (wenn man das überhaupt so nennen kann) bezieht sich aus C von A-Z von Jürgen Wolf ...

    dann ist dein c-wissen gleich null, denn dieses machwerk taugt noch nicht mal als klopapier.
    🙂



  • rotkäppchen-fan schrieb:

    ~hanshiro schrieb:

    Ja genau mein C-Wissen (wenn man das überhaupt so nennen kann) bezieht sich aus C von A-Z von Jürgen Wolf ...

    dann ist dein c-wissen gleich null, denn dieses machwerk taugt noch nicht mal als klopapier.
    🙂

    *räusper*



  • Tim schrieb:

    *räusper*

    bist du anderer meinung?
    🙂



  • gute-bücher fan schrieb:

    Tim schrieb:

    *räusper*

    bist du anderer meinung?
    🙂

    Man muss seine Meinung nicht immer so total äußern.



  • Tim schrieb:

    Man muss seine Meinung nicht immer so total äußern.

    kennst mich ja. immer frech, taktlos und dadurch unbeliebt wie dieter bohlen.
    🙂


Anmelden zum Antworten