mmap(2)vs mmap(3)

EQv*_*van 7 linux memory mmap

有谁知道mmap(2)和之间的区别mmap(3)是什么?第3节描述为"本章描述了除第2章中描述的库函数之外的所有库函数,它们实现了系统调用." 不mmap(3)执行系统调用?

阅读这两个手册页,我看到它mmap(2)似乎接受了比它更多种各样的标志mmap(3),并声称能够映射设备I/O空间. mmap(3)声称能够将"共享内存对象"和"类型化内存对象"映射到文件中,但未提及设备I/O.

由于这两个函数具有相同的名称,我甚至不确定如何选择一个而不是另一个.

Mar*_*wis 18

mmap(3)应该是POSIX函数.它应该在所有方面提供POSIX强制要求的语义,即使它与Linux"本机"的做法不同.mmap(2)是系统调用,并提供Linus认为重要的所有花里胡哨.当然,C库函数是使用系统调用实现的.

要从字面上调用系统调用(绕过C库),您可以使用<sys/syscall.h>.

mmap(3)的实际实现可以在C库中找到.如您所见,它通常将控制直接传递给mmap(2),除非在编译时(glibc),mmap2(2)被选为"后端".