Playing around with mmap for the fun of it, I have the following code:

(.. 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 ..)

This works as expected. But before I got to this, I tried...

m = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, 0);

... and mmap errored out with:

mmap: Permission denied

In general, what's the difference between the two flags (man page isn't to generous on this subject)? What sort of permission (and where) am I missing?

EDIT

Like it usually happens.. partially figured it out.

Turns out open needed an O_RDWR flag.

So, am I correct to assume that:

  • MAP_PRIVATE - changes are made in memory only, not saved to disk?
  • MAP_SHARED - changes would be saved to disk...

... but I'm not saving anything to disk anywhere, I thought? Just operating on memory.

Edit
Report