Играя с mmap
ради удовольствия, у меня есть следующий код:
(.. snip ..)
fd = open("/home/me/straight_a.txt", O_RDONLY);
if (fd == -1) {
perror("open");
exit(1);
}
m = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, fd, 0);
if (m == MAP_FAILED) {
perror("mmap");
exit(1);
}
printf("m is %p\n", m);
printf("*m = %c\n", *m);
printf("*(m+1) = %c\n", *(m+1));
(.. snip ..)
Это работает, как ожидалось. Но прежде чем я дошел до этого, Я пробовал ...
m = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);
...и в mmap возникла ошибка:
mmap: Permission denied
В общем, в чем разница между двумя флагами (справочная страница не слишком щедра по этому поводу)? Какого рода разрешение (и где) мне не хватает?
РЕДАКТИРОВАТЬ
Как обычно бывает ... частично разобрался.
Оказывается, open
требовал флага O_RDWR
.
Итак, правильно ли я предполагаю, что:
... но Я подумал, что я ничего никуда на диск не сохраняю? Просто работает с памятью.