Frage zu Shared Memory Segmenten.



  • Hallo leute ich habe ein dringendes Problem,

    ich will unter Linux ein Shared Memory Segement auslesen die Daten Die Darin enthalten sind umwandeln und dann in ein zweites Shared Memory Segment reinschreiben. Das auslesen funktioniert schonmal ganz gut, dazu hab ich mir eine Struktur deklariert die dem Inhalt des Segmentes Entspricht.
    Das Einlesen dieser Daten Funktioniert auch ganz gut aber dann gehts los.
    Ich habe insgesamt 6 Variablen.
    Datum1[16] typ Char
    Datum2[16] typ Char
    und noch 4 Andere Variablen die vom Typ Integer sind.
    Ich will jetzt die Integer Variablen in ein Char Datenfeld Einlesen.
    Dort drin sollen die Werte und das Datum getrennt mit z.B. "-" drin stehen.
    (z.b. Data[100] Typ Char). Als nächstes und das ist eigentlich das größte problem muss ich ja die Variable Data wieder in ein Shared Memory Segment schreiben. Wie bekomme ich das hin??

    Bitte um Hilfe

    DAnke Himmi





  • Hi,

    also das mit dem sprintf() funktioniert schonmal wunderbar. Danke dafür.
    Aber das mit dem memcpy ist glaub ich nicht das was ich suche. Ich muss nämlich
    über die shmat() / shmdt() /shmctl() Anweisungen auf den Block zugreifen. Auslesen funktioniert wie gesagt super aber ich weis net wie ich mit den Befehlen die Daten wieder in den Memory Block reinbekommen soll.

    Himmi



  • kann es sein, dass du Shared Memory noch gar nicht verstanden hast? Du erhälst doch einen Pointer auf das Shared Memory Segment und kannst damit dann operieren wie mit normalen Speicher, also auch mit memcpy

    http://www.ecst.csuchico.edu/~beej/guide/ipc/shmem.html



  • Hi,
    danke habs mal ausprobiert. Aber irgendwie scheint der ein Problem zu haben. Er kompiliert die Datei vollständig und beim Ausführen bekomm ich dann die Meldung: "Speicherzugriffsfehler *$" oder so ähnlich. Hast du ne idee
    was das sein könnte ??

    Danke
    Himmi



  • du schreibst auf Speicher, der dir nicht gehört. Benutz den GDB um den Fehler zu finden.


Anmelden zum Antworten