代码之家  ›  专栏  ›  技术社区  ›  Cheery

mmap保护标志对进程间共享的影响

  •  1
  • Cheery  · 技术社区  · 17 年前

    int prot = PROT_READ|PROT_EXEC;
    image = mmap(NULL, filesize, prot, MAP_PRIVATE, fildes, 0);
    

    vs:

    int prot = PROT_READ|PROT_WRITE|PROT_EXEC;
    image = mmap(...)
    

    我想在映射后对内存区域的一小部分进行小幅修改,然后重新保护它,因为这比在需要时保护小部分更简单。

    1 回复  |  直到 17 年前
        1
  •  1
  •   raimue    17 年前

    根据 mmap(2) 在最近的Linux系统的手册页上,MAP_PRIVATE使用以下命令分配内存 copy-on-write

    页面大小取决于您的系统,在x86上通常为4096字节。如果您对系统的页面大小感兴趣,可以使用 sysconf(3) .

       #include <unistd.h>
       long pagesize = sysconf(_SC_PAGESIZE);
    

    你从mmap()得到的指针已经指向页面大小的倍数,你应该向mprotect()传递一个与页面边界对齐的地址。