Ich bin in der Lage, eine Struktur über den gemeinsamen Speicher zu senden, aber was ist, wenn ich meineStructure [SIZE] ??Freigeben eines Vektors mit mmap in C
Ich versuche dies mit einem Vektor von ganzen Zahlen. Und mein Problem beginnt mit dem Schriftsteller hier:
int fd, data_size = VECSIZE*sizeof(int), i, numbers[VECSIZE];
int *number;
fd = shm_open("/ex02_1100620", O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);
ftruncate(fd, data_size);
number = numbers;
srand((unsigned) time(NULL));
for(i = 0; i < SIZE; i++){
number[i] = rand()% SIZE + 1;
}
number = (int *)mmap(NULL, data_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
Nun, wenn ich so etwas wie:
number = numbers
und dann number[SIZE]
Positionen drucken es funktioniert, aber wenn ich number[SIZE]
nach dem Mmap drucken druckt er alle 0 und tut das gleiche für den Leser.
Ich mache das, aber ich denke, die Fehler zu erfassen, um mein Problem zu erklären, ist nicht wirklich notwendig.
Ich habe diesen Beitrag Sharing an array of structs using mmap gelesen, konnte aber nicht verstehen, was ich falsch mache.
Wenn Sie weitere Informationen zum Code benötigen, sagen Sie es einfach.
Ähm, hier der Autor schreibt, nichts zu der geteilte Erinnerung? – immibis
Da habe ich Probleme. Soll ich einfach Nummer benutzen und Zahlen vergessen? Wenn das der Fall ist sollte ich nicht malloc anstelle von Nummer = Zahlen verwenden? Und wie würde das mit dem Aufruf von mmap funktionieren? – AimForNuts
Ich meine, es schreibt nichts in den geteilten Speicher *, weil du es nicht gesagt hast, dass du das tun sollst * - du stellst 'number' auf' numbers' und schreibst dann eine Reihe von Zahlen durch 'number' (also, zu das Array 'numbers', dann ordnen Sie einen gemeinsamen Speicher zu und setzen' number', um auf den gemeinsamen Speicher zu zeigen. Zu keinem Zeitpunkt haben Sie tatsächlich in den gemeinsamen Speicher geschrieben. – immibis