hallo!
Ich beschäftige mich mit Systemprogrammierung im Linux und habe folgendes Problem:
Wenn ich eine Shared Memory Segment erzeuge(shmget) und dieses an den Prozess anbinde (shmat), wie kann ich dann nachträglich dieses Segment vergrößern?
Ich erzeuge einen neuen Prozess (fork()), im Child Prozess will ich dann Daten in ein Array einlesen und dieses array dann im Shared Memory Speichern. Das Problem ist, dass ich nicht weiß wieviele Daten ich einlese. Das Shared Memory Segment soll also dynamisch wachsen können, der Vater soll dann Zugriff auf dieses Array haben.
Bei der Umsetzung fehlt mir etwas das Verständnis. Ich habe auch nirgendwo im Internet gefunden, wie ich ein Shared Memory Segment vergrößere...
lg Thomas
+ Antworten
Ergebnis 1 bis 6 von 6
Shared Memory Segment vergrössern
Diskussion über Shared Memory Segment vergrössern in C und C++ der Kategorie Programmierung; hallo! Ich beschäftige mich mit Systemprogrammierung im Linux und habe folgendes Problem: Wenn ich eine Shared Memory Segment erzeuge(shmget) und ...
- 16.05.2011 23:34 #1Reg.-Benutzer
- Reg.-Datum
- 20.04.2009
- Beiträge
- 44
Shared Memory Segment vergrössern
- 17.05.2011 08:38 #2
Also ich weiß nicht wie das in dem Fall jetzt genau ist aber wenn du dir bei C++ mit new Speicher holst und diesen dann vergrößern willst musst du dir einen neuen größeren Speicherblock holen und die Daten aus dem alten Block darein kopieren.
Wenn es keine Funktion gibt um deinen Speicherblock zu vergrößern wird es wahrscheinlich genauso sein.Ich bin Guybrush Threepwood, ein mächtiger Pirat!
- 17.05.2011 09:25 #3
Moin!
Muss es denn unbedingt ein Array sein? Du koenntest ja auch eine Liste nehmen (musst Du wahrscheinlich selber schreiben), die ihre Bestandteile auf mehrere Shared Memory Segmente verteilt. Dann kannst Du Dir das von Guybrush beschriebene Kopieren sparen.
- 17.05.2011 12:13 #4Reg.-Benutzer
- Reg.-Datum
- 20.04.2009
- Beiträge
- 44
Ich muss C (ohne ++) verwenden.
Es muss ein Array sein. Das ist leider die Aufgabenstellung.
Wenn ich meine werte auf den Pointer *shared_memory schreiben und einfach shared_memory[i] immer erhöhe, dann geht mir irgendwann der Shared Memory aus.
Genau hier liegt das Problem. Ich bin im Child Prozess, habe dann irgendwann zu wenig Shared Memory und will diesen vergrößern. Ich könnte über umwegen ein größeres Speichersegment anfordern, den Inhalt des alten rüberkopieren und so den Shared Memory immer Blockweise neu anfordern. Ist ein wenig umständlich das dann wirklich so zu realistieren. Die frage wäre eben, ob es eine shmget oder ähnliche Funktion gibt, wo ich das Speichersegment einfach vergrößere (ähnlich malloc/realloc).
- 17.05.2011 22:21 #5Reg.-Benutzer
- Reg.-Datum
- 17.05.2011
- Beiträge
- 1
Gibt es nicht. Du musst es manuell machen, indem Du den Inhalt des aktuellen Shared Memory-Bereichs temporaer in den Heap-Speicher des Prozesses kopierst, den ShMem mit shmdt() unattachest, neuen, groeszeren mit shmget() anforderst, in den Kontext des Prozesses mapst shmat() und bei Erfolg den Inhalt aus dem Heap-Speicher wieder zurueck in den neuen ShMem kopierst.Die frage wäre eben, ob es eine shmget oder ähnliche Funktion gibt, wo ich das Speichersegment einfach vergrößere (ähnlich malloc/realloc).Geändert von frinky (17.05.2011 um 22:26 Uhr)
- 08.01.2012 15:27 #6Reg.-Benutzer
- Reg.-Datum
- 08.01.2012
- Beiträge
- 111
Warum willst Du überhaupt das veraltete sysv-shm ?
Das ist ein antikes Relikt aus Urzeiten, wo's noch keine (richtigen) MMUs gab.
Wie wärs mit mmap() und mremap() ?
Aktive Benutzer
Aktive Benutzer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Ähnliche Themen
-
struktur im shared memory
Von cable545 im Forum C++: Compiler, IDEs, APIsAntworten: 4Letzter Beitrag: 09.01.2011, 20:39 -
PHP5 Shared Memory ?
Von Aiun im Forum Skript- und WebserverprogrammierungAntworten: 1Letzter Beitrag: 28.07.2008, 11:53 -
Shared Memory
Von Sloenig im Forum C++: Compiler, IDEs, APIsAntworten: 2Letzter Beitrag: 02.04.2007, 17:00 -
notebook mit shared memory???
Von bergi im Forum HardwareAntworten: 6Letzter Beitrag: 09.03.2005, 11:52 -
Shared-Memory beim Notebook
Von kuekenMcNugget im Forum HardwareAntworten: 1Letzter Beitrag: 13.07.2002, 21:12
Die häufigsten Suchbegriffe für diese Seite:
Bisher noch keine Treffer von einer Suchmaschine

LinkBack URL
About LinkBacks
Zitieren
Moderator Daily Talk