Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Shared Memory

3 views
Skip to first unread message

Heinz-Mario Frühbeis

unread,
Apr 19, 2013, 5:54:23 AM4/19/13
to
Hallo zusammen!

Auf <http://openbook.galileocomputing.de/unix_guru/node393.html> habe
ich was interessantes gefunden. Doch war ich gleich verwundert, weil ich
mir dachte "Machste erst mal das Programm "Two" um mal zu sehen, was
passiert, wenn Programm "One" noch gar kein Shared Memory gesetzt hat.
Aber es kommt kein Fehler<staun>.

#include <sys/ipc.h>
#include <sys/shm.h>
#define MAXMYMEM 30
int main(){
shID = shmget(2404, MAXMYMEM, IPC_CREAT | 0666);
if (shID >= 0) {
/* nun holen wir den Speicher */
myPtr = static_cast<char*>(shmat(shID, 0, 0));
if (myPtr==(char *)-1) {
//perror("shmat");
std::cout<<"\nSHARE IDABASE ERROR";
std::cout.flush();
} else {
/* Speicher ist zugreifbar: füllen! */
for (i=0; i<MAXMYMEM; i++) {
myPtr[i] = 'A'+i;
std::cout<<"\nSHARE IDABASE "<< myPtr[i];
std::cout.flush();
}
//getchar(); /* Warte mal auf eine Taste */
/* gebe den Speicher auf */
shmdt(myPtr);
}
} else { /* shmget lief schief */
std::cout<<"\nSHARE IDABASE ERROR 1";
std::cout.flush();
}
}

Die Ausgabe:
SHARE IDABASE A
SHARE IDABASE B
SHARE IDABASE C
SHARE IDABASE D
SHARE IDABASE E
SHARE IDABASE F
SHARE IDABASE G
SHARE IDABASE H
SHARE IDABASE I
SHARE IDABASE J
SHARE IDABASE K
SHARE IDABASE L
SHARE IDABASE M
SHARE IDABASE N
SHARE IDABASE O
SHARE IDABASE P
SHARE IDABASE Q
SHARE IDABASE R
SHARE IDABASE S
SHARE IDABASE T
SHARE IDABASE U
SHARE IDABASE V
SHARE IDABASE W
SHARE IDABASE X
SHARE IDABASE Y
SHARE IDABASE Z
SHARE IDABASE [
SHARE IDABASE \
SHARE IDABASE ]
SHARE IDABASE ^

Wie kann denn das? Wieso bekomme ich denn eine Auasgabe, wie man sie
erwartet, wenn Programm "One" einen Shared Memory-Bereich eingerichtet
hätte?

Mit Gruß
Heinz-Mario Frühbeis

Heinz-Mario Frühbeis

unread,
Apr 19, 2013, 6:11:05 AM4/19/13
to
Worum es mir eigentlich geht ist:

Programm[P1] und Programm[P2] laufen jeweils im eigenen Prozess

[P1] hat ein #include zu einer dyn. Bibliothek[B1]
[P2] hat auch ein #include zu [B1]

[P1] soll eine Klasse von [B1] instanziieren und diese als Shared Memory
zugᅵnglich machen
[P2] soll diese Klasse per Shared Memory nutzen kᅵnnen

Wie kriege man das hin?

Mit Gruᅵ
Heinz-Mario Frᅵhbeis

Rainer Weikusat

unread,
Apr 19, 2013, 11:30:50 AM4/19/13
to
[...]


> Wie kann denn das? Wieso bekomme ich denn eine Auasgabe, wie man sie
> erwartet, wenn Programm "One" einen Shared Memory-Bereich eingerichtet
> hätte?

Aeh .... wie waere es mit "Weil Du 'Program one' uebersetzt hast und
ausfuehrst"?

Heinz-Mario Frühbeis

unread,
Apr 24, 2013, 8:32:03 AM4/24/13
to
Oh man, da habe ich "Program one" ausgeführt. War keine Absicht!
Das passiert wohl, wenn man "drei Baustellen" hat...
Ich versuche es dann mal richtig<!>.

Danke, das du mich darauf aufmerksam gemacht hast!

Mit Gruß
Heinz-Mario Frühbeis

0 new messages