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