hi,
das Verhalten meines Programmes mit shared memory irritiert mich:
Ich habe 2 Programme,
Prog1
- erzeugt ein shared memory und schreibt Daten rein
- erzeugt eine Datei, shm-info, die u.a. den shared memory ID enthält
Prog2
- wartet, bis die Datei, shm-info, erstellt ist
- liest den shared memory ID, sim_shm_id, daraus
- verbindet sich mit
- liest die Daten daraus mit Setzen eines Pointers
- löst die Verbindung mit
Das funktioniert soweit (der Zugriff über den Typ CTRL_TYPE ist ok so).
Was mich irritiert, ist nun, dass nach Beenden von Prog2 und Neustart (Prog1 läuft weiter) die Adresse, sim_shm_ptr, jedesmal einen anderen Wert hat. Dennoch sieht Prog2 über den Pointer pCtrl die richtigen Daten.
Wie kann denn mit ständig wechselnden Adressen immer der gleiche (und auch noch richtige) Inhalt ankommen?
Ist die Adresse, sim_shm_ptr, evtl. eine für Prog2 relative Adresse und ändert sich, weil Prog2 nach jedem erneuten Start an einer anderen Stelle im Speicher liegt?
Mich irritieren auch funktionierende Programme, wenn ich nicht verstehe, warum sie funktionieren :???:
Kann mich Neuling in Systemprogrammierung jemand erlösen? Danke schon mal
das Verhalten meines Programmes mit shared memory irritiert mich:
Ich habe 2 Programme,
Prog1
- erzeugt ein shared memory und schreibt Daten rein
- erzeugt eine Datei, shm-info, die u.a. den shared memory ID enthält
Prog2
- wartet, bis die Datei, shm-info, erstellt ist
- liest den shared memory ID, sim_shm_id, daraus
- verbindet sich mit
Code:
sim_shm_ptr = (unsigned char *) shmat(sim_shm_id, 0, SHM_RND)
Code:
pCtrl = (CTRL_TYPE *) (sim_shm_ptr + offset)
Code:
shmdt(sim_shm_ptr)
Das funktioniert soweit (der Zugriff über den Typ CTRL_TYPE ist ok so).
Was mich irritiert, ist nun, dass nach Beenden von Prog2 und Neustart (Prog1 läuft weiter) die Adresse, sim_shm_ptr, jedesmal einen anderen Wert hat. Dennoch sieht Prog2 über den Pointer pCtrl die richtigen Daten.
Wie kann denn mit ständig wechselnden Adressen immer der gleiche (und auch noch richtige) Inhalt ankommen?
Ist die Adresse, sim_shm_ptr, evtl. eine für Prog2 relative Adresse und ändert sich, weil Prog2 nach jedem erneuten Start an einer anderen Stelle im Speicher liegt?
Mich irritieren auch funktionierende Programme, wenn ich nicht verstehe, warum sie funktionieren :???:
Kann mich Neuling in Systemprogrammierung jemand erlösen? Danke schon mal