1 linux ubuntu posix embedded-linux difference
linux 系统调用 mmap(2) 和 posix mmap(3) 函数有什么区别?浏览源代码时如何区分使用的是哪一个,因为它们的头文件是一样的。具体见下。
我在 Ubuntu 上运行。我认为您使用的操作系统无关紧要。手册页确实确实没有提供太多有用的信息。
根据 Jörg W Mittag 的回复,我认为当我浏览源代码时 mmap 必须是 posix 函数。但我想知道为什么我在使用 mmamp(3) 函数时不需要显式链接到 posix 库。我的意思是编译源代码时不需要额外的链接标志。
根据Faschingbauer的回复,如果我们得出没有实现posix mmap的结论,就会出现一些问题。你看,实现了一些posix函数?例如,shm_opn?sem_open,mq_open?。同时?有相应的具有相同的功能(例如,shmget,semget,msgget)。如何解释?至少,我认为一些posix功能是由linux实现的。
#log for "man 2 mmap"
MMAP(2) Linux Programmer's Manual
NAME
mmap, munmap - map or unmap files or devices into memory
SYNOPSIS
#include <sys/mman.h>
#log for "man 3 mmap"
MMAP(3POSIX) POSIX Programmer's Manual
PROLOG
This manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (consult the corresponding Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux.
NAME
mmap — map pages of memory
SYNOPSIS
#include <sys/mman.h>
Run Code Online (Sandbox Code Playgroud)
小智 5
首先,一些事实:
查看 Linux (" man 2 mmap") 手册页,您可以看到它定义了例如MAP_LOCKEDflags 参数中的位(顺便说一句,MAP_LOCKED对mlock()不必要的单独调用)。此标志未出现在 POSIX 手册页 (" man 3 mmap") 中,因为 POSIX 标准不需要它来实现一致的实现。
也就是说,没有办法mmap()在 Linux 中使用替代实现
。如果您正在阅读的某些源代码使用mmap(),并且您在 Linux 上,则使用 的 Linux 实现mmap(),因为它没有 POSIX 实现。
POSIX 版本分别包含在 Linux 实现中。Linux 与 POSIX 是“兼容的”,可以这么说 - 它没有重新定义 POSIX 所需的任何功能(这意味着违反标准),而只是添加了MAP_LOCKED上述扩展。
嗯。我个人的意见是,比如说,mmap
手册页的 POSIX 版本只是为了迷惑用户。如果您无意中点击了“3”mmap()手册页部分,并且您不知道 POSIX 和 Linux 之间的关系,那么充其量您确实很困惑,或者最坏的情况是走错了路。
我建议你省略节号,只说“ man mmap”——这会在所有手册节中搜索“mmap”的出现并在第一个停止(请参阅“ man man”以获得确切的定义)。
(man write当您搜索write()系统调用的定义时,这与“ ”的设想不一样,因为write在“1”部分中有一个相同的命令“ ”:-))
如“ man man”所述,手册部分“2”包含系统调用文档。知道它mmap()是由 Linux 内核实现的(因为内核实现了诸如内存管理之类的核心操作系统功能)只能帮助消除关于您正在阅读的文档是否是您想要的混淆。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |