linux - mmap(2) 与 mmap(3)

标签 linux memory mmap

有谁知道 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/

相关文章:

linux - 关于如何在 Linux 上启动时尽早运行脚本的任何提示?

c# - 获取用于内存映射的结构的大小

go - Golang中的0x1是什么意思?

linux - 在 EC2 AMI 中调整/重新调整 SWAP 内存

linux - 如何在ubuntu上完全卸载webstorm

linux - 为什么反引号中的嵌套引号在 bash 中有效?

php - 设置要在一天的 cron 作业的特定时间事件上执行的 url

linux - 使用 mmap 复制文件

memory - 如何写入加载到 RAM 内存中的共享库代码段?

C编程: How to use mmap(2) to read file parallel by multiple threads?