Играя с 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
.
Итак, могу ли я предположить, что:
- MAP_PRIVATE - изменения производятся только в памяти, а не на диске?
- MAP_SHARED - изменения будут сохранены на диск...
... но я ничего не спасаю на диске, подумал я? Просто работайте с памятью.