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;
}
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.>