MINCORE - Linux手册页

时间:2019-08-20 17:58:59  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

mincore-确定页面是否驻留在内存中

语法

#包括
#包括

int mincore(void * addr,size_t length,unsigned char * vec);

glibc的功能测试宏要求(请参阅feature_test_macros(7)):

mincore():
从glibc 2.19开始:
_DEFAULT_SOURCE
Glibc 2.19及更早版本:
_BSD_SOURCE _SVID_SOURCE

说明

mincore()返回一个向量,该向量指示调用进程的虚拟内存的页面是否驻留在核心(RAM)中,因此如果被引用,则不会导致磁盘访问(页面错误)。内核返回有关页面的驻留信息,这些信息从地址addr开始,并以长度字节为单位。

addr参数必须是系统页面大小的倍数。 length参数不必是页面大小的倍数,但是由于会返回整个页面的驻留信息,因此长度实际上会四舍五入到页面大小的下一个倍数。可以使用sysconf(_SC_PAGESIZE)获得页面大小(PAGE_SIZE)。

vec参数必须指向至少包含(length + PAGE_SIZE-1)/ PAGE_SIZE个字节的数组。返回时,如果相应的页面当前驻留在内存中,则将设置每个字节的最低有效位,否则将其清除。 (每个字节中其他位的设置是未定义的;这些位保留供以后使用。)当然,vec中返回的信息只是快照:未锁定在内存中的页面可以随时进出,并且该调用返回时,vec的内容可能已经过时。

返回值

成功时,mincore()返回零。如果出错,则返回-1,并正确设置errno。

错误说明

EAGAIN内核暂时没有资源。

EFAULT
vec指向无效的地址。
EINVAL
addr不是页面大小的倍数。
ENOMEM
长度大于(TASK_SIZE-addr)。 (如果为长度指定了负值,则可能会发生,因为该值将被解释为大的无符号整数。)在Linux 2.6.11和更早版本中,针对此条件返回了错误EINVAL。
ENOMEM
addr到addr +长度包含未映射的内存。

版本

自Linux 2.3.99pre1和glibc 2.2起可用。

遵循规范

在POSIX.1中未指定mincore(),并且并非在所有UNIX实现中都可用。

BUGS

在内核2.6.21之前,mincore()不会为MAP_PRIVATE映射或非线性映射(使用remap_file_pages(2)建立)返回正确的信息。

另外参见

fincore(1),madvise(2),mlock(2),mmap(2),posix_fadvise(2),posix_madvise(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/