In linux Ubuntu habe ich den code für shm_open geschrieben abe ich habe den Fehler ,error :ld returned 1 exit status?
-lrt habe ich brobieren
den code :#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <features.h>
#include <bits/types.h>
#include <stddef.h>
#define Children 10
#define Sequenz 10000
int i_glVar;
void Childern_prozesses(int *p_shmPtr, int i) {
int j;
for (j = 0; j < Sequenz; j++) {
int number = *p_shmPtr;
number++;
*p_shmPtr = number;
}
}
int main() {
i_glVar = 0;
int *p_shmPtr = &i_glVar;
int i;
const char *name_shm = "/OS"; // Name des Shared Memory
int fd_shm = 0; // Dateideskriptor für das Shared Memory
fd_shm = shm_open(name_shm, O_CREAT | O_RDWR, 0666);
if (fd_shm == -1) {
printf("Fehler beim Erzeugen des Shared Memory.\n");
exit(EXIT_FAILURE);
}
// Größe des Shared Memory setzen
ftruncate(fd_shm, sizeof(int));
pid_t pid;
for (i = 0; i < Children; i++) {
pid = fork();
if (pid < 0) {
printf("Fehler beim Erzeugen des Kind-Prozesses.\n");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// Child-Prozess
int *p_childPtr = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd_shm, 0);
Childern_prozesses(p_childPtr, i);
printf("Child %d: Endwert von i_glVar: %d\n", i, *p_childPtr);
printf("Child %d: Startadresse von p_shmPtr: %p\n", i, p_childPtr);
printf("Child %d: Startadresse von i_glVar: %p\n", i, &i_glVar);
exit(EXIT_SUCCESS);
}
}
for (i = 0; i < Children; i++) {
wait(NULL);
}
// Parent-Prozess
p_shmPtr = mmap(0, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd_shm, 0);
printf("Parent: Endwert von i_glVar: %d\n", i_glVar);
printf("Parent: Startadresse von p_shmPtr: %p\n", p_shmPtr);
printf("Parent: Startadresse von i_glVar: %p\n", &i_glVar);
// Shared Memory ausblenden
munmap(p_shmPtr, sizeof(int));
// Shared Memory löschen
shm_unlink(name_shm);
return 0;
}