Hallo,
Nun habe ich eine initSHM() Funktion erstellt um das SHM zu initialisieren bzw. zu erzeugen. Ohne die shmctl() Funktion wird das SHM Segment erstellt, starte ich das Programm ein 2. mal bekomme ich eine Fehlermeldung ala File already exists... ändere ich den SHM_KEY gehts wieder... ok dann lösche ich in der initSHM() Funktion halt jedesmal das SHM Segment das angelegt wurde denke ich mir... doch beim Aufruf von shmctl() bekomme ich die Meldung:
Und warum wird beim Erzeugen des SHM Segments "Alles klar..." NIE ausgegeben obwohl es erzeugt wurde? Gibt es keinen iShmId wert über/gleich 0 ?
CodeAuszug:
Nun habe ich eine initSHM() Funktion erstellt um das SHM zu initialisieren bzw. zu erzeugen. Ohne die shmctl() Funktion wird das SHM Segment erstellt, starte ich das Programm ein 2. mal bekomme ich eine Fehlermeldung ala File already exists... ändere ich den SHM_KEY gehts wieder... ok dann lösche ich in der initSHM() Funktion halt jedesmal das SHM Segment das angelegt wurde denke ich mir... doch beim Aufruf von shmctl() bekomme ich die Meldung:
Warum das denn? Warum konnte das SHM Segment nicht ordnungsgemäß gelöscht werden?Fehler Identifier Removed beim Loeschen des Shared Memory Segments
Und warum wird beim Erzeugen des SHM Segments "Alles klar..." NIE ausgegeben obwohl es erzeugt wurde? Gibt es keinen iShmId wert über/gleich 0 ?
CodeAuszug:
Code:
void initSHM()
{
int iShmId;
iShmId = shmget(SHM_KEY, 100, SHM_W | SHM_R | IPC_CREAT | IPC_EXCL);
if(iShmId < 0)
{
printf("Fehler beim erzeugen einens Shared Memory Segments: %s \n", strerror(errno));
exit(-1); // und tschüss
}
if(iShmId = 0)
printf("Alles klar ist == 0 \n");
if(iShmId > 0)
printf("Alles klar ist > 0 \n");
/* Shared Memory Segment abkoppeln/löschen */
if(shmctl(iShmId, IPC_RMID, NULL ) < 0)
{
printf("Fehler %s beim Loeschen des Shared Memory Segments\n", strerror(errno));
exit(-1); // und tschüss
}
}
int main (void)
{
pid_t children[ANZAHL_KINDER]; // Hier sind alle PID's der Kinder gespeichert gemäß der Reihenfolge der Erzeugung
unsigned int i;
printf("Vater hat die PID: %d \n", getpid());
initSHM()