Der gemeinsame Speicher verschwindet nach Abschluss des Schriftstellers, obwohl SHMCTL nicht zum Entfernen verwendet wirLinux

Linux verstehen
Anonymous
 Der gemeinsame Speicher verschwindet nach Abschluss des Schriftstellers, obwohl SHMCTL nicht zum Entfernen verwendet wir

Post by Anonymous »

Ich verwende das Shared -Speicher des Systems V in meinem Programm. Der Autor -Prozess erstellt erfolgreich das gemeinsame Speicher mit shmget () . Wenn der Autor-Prozess endet, stelle ich fest, dass das Shared Memory Segment verschwindet, obwohl ich nicht shmctl () mit ipc_rmid aufrufen kann.

Code: Select all

// writer.c
#include 
#include 
#include 
#include 
#include 

#define SHM_KEY 0x1234
#define SHM_SIZE sizeof(int)

int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget failed");
exit(1);
}

int *shm_ptr = (int *)shmat(shmid, NULL, 0);
if (shm_ptr == (void *)-1) {
perror("shmat failed");
exit(1);
}

*shm_ptr = 42;
printf("Writer: wrote %d to shared memory.\n", *shm_ptr);

// Keeping writer alive
printf("Writer: sleeping for 30 seconds...\n");
sleep(30);

shmdt(shm_ptr);
return 0;
}
< /code>
Hier ist der Code für den Leser: < /p>
// reader.c
#include 
#include 
#include 
#include 

#define SHM_KEY 0x1234
#define SHM_SIZE sizeof(int)

int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, 0666);
if (shmid == -1) {
perror("shmget failed");
exit(1);
}

int *shm_ptr = (int *)shmat(shmid, NULL, 0);
if (shm_ptr == (void *)-1) {
perror("shmat failed");
exit(1);
}

printf("Reader: read %d from shared memory.\n", *shm_ptr);
shmdt(shm_ptr);
return 0;
}
Wenn ich den Autor ausführe, kann ich den gemeinsam genutzten Speicher mit IPCS -m sehen. Nachdem der Schriftsteller beendet und beendet ist, verschwindet das Shared Memory Segment und ich kann mit dem Leser nicht darauf zugreifen. < /P>
Was könnte dieses Verhalten verursachen? Gibt es eine Systemeinstellung, die dazu führen kann, dass der gemeinsame Speicher automatisch gelöscht wird, nachdem der Schriftsteller beendet ist? Dieses Programm funktioniert ordnungsgemäß auf macOS , wo das gemeinsame Gedächtnis nach dem Verlassen des Schriftstellers bestehen bleibt. Es ist jedoch fehlschlägt auf Linux : Das Shared Memory Segment verschwindet, sobald der Autor-Prozess endet, und ich kann nicht mit dem Leser darauf zugreifen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post