Я могу отправить структуру через общую память, но что, если я хочу отправить myStructure [SIZE] ??Обмен вектором с mmap в C
Я пробую это с вектором целых чисел. И моя проблема начинается писателя здесь:
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);
Теперь, если я что-то вроде:
number = numbers
, а затем распечатать number[SIZE]
позиции это работает, но если я печатаю number[SIZE]
после ттар печатает все 0 и делает то же самое на читателя.
Я делаю это, но я думаю, что ловить ошибки, чтобы объяснить мою проблему, на самом деле не нужно.
Я читал это сообщение Sharing an array of structs using mmap, но не мог понять, что я делаю неправильно.
Если вам нужна дополнительная информация о коде, просто скажите об этом.
Um, писатель здесь ничего к не пишут Общая память? – immibis
Вот где у меня проблемы. Должен ли я просто использовать номер и забыть о номерах? Если это так, не следует использовать malloc вместо числа number = numbers? И как это будет работать с призывом mmap? – AimForNuts
Я имею в виду, что он ничего не пишет в разделяемую память *, потому что вы не сказали этому делать это * - вы устанавливаете 'number', чтобы указывать на' numbers', а затем записывать кучу чисел через 'number' (так, чтобы массив 'numbers'), тогда вы сопоставляете некоторую общую память и устанавливаете' number', чтобы указывать на общую память. Ни в коем случае вы на самом деле не писали в общую память. – immibis