Измените эту строку
void * mem = mmap(0, size, PROT_READ, 0, fd, offset);
на
void * mem = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, offset);
И не сравнивайте mem
с -1
.Используйте это вместо:
if(mem == MAP_FAILED) { ... }
Это и более читабельно, и более портативно.
Общий совет: если вы работаете на платформе UNIX, отличной от той, к которой вы привыкли, это хорошоИдея открыть страницу руководства.Для mmap
на OS X
его можно найти здесь .В нем говорится
Соответствующие приложения должны указывать либо MAP_PRIVATE, либо MAP_SHARED.
Таким образом, указание 0
в четвертом аргументе не OK в ОСX. Я считаю, что это верно для BSD в целом.