Проверьте ваш возврат от mmap()
.
Вы пытались mmap()
stdin.За исключением экзотических сред, stdin - это своего рода терминал или канал, ни один из которых не поддерживает ввод-вывод в память.
Попробуйте следующий пример:
int* createSharedMemory(size_t size) {
int protection = PROT_READ | PROT_WRITE;
int visibility = MAP_ANONYMOUS | MAP_SHARED;
int *p = (int*)mmap(0, size, protection, visibility, -1, 0);
if (p == (int*)(ptrdiff_t)-1) return NULL;
return p;
}
arr = createSharedMemory(sizeof(int)*size);
if (arr == NULL) {
perror("mmap");
exit(3);
}
Кстати, ваш цикл чтения взорвется, если sizeof(int) < 4
что маловероятно.