有人知道mmap(2)和mmap(3)之间的区别吗?Man第3节被描述为“本章描述了除第2章中描述的实现系统调用的库函数之外的所有库函数”。mmap(3)不执行系统调用吗?
阅读这两个手册页,我发现mmap(2)似乎接受比mmap(3)更广泛的标志,并声称能够映射设备I/O空间。mmap(3)声称能够将“共享内存对象”和“类型化内存对象”映射到文件中,但没有提到设备I/O。
由于这两个函数具有相同的名称,我甚至不确定如何才能选择一个而不是另一个。
发布于 2009-08-30 17:15:38
mmap(3)应该是POSIX function。它应该在所有方面提供POSIX所要求的语义,即使这与Linux“本机”所做的有所不同。mmap(2)是系统调用,它提供了Linus认为重要的所有细节。当然,C库函数是使用系统调用实现的。
要从字面上调用系统调用(绕过C库),您可以使用<sys/syscall.h>。
mmap(3)的实际实现可以在C library中找到。正如您所看到的,它通常将控制直接转移到mmap(2),除非在编译时(对于glibc)选择mmap2(2)作为“后端”。
https://stackoverflow.com/questions/1354335
复制相似问题