内容简介
#include <sys/mman.h>int remap_file_pages(void *start,%uA0size_t%uA0size, int%uA0prot,%uA0ssize_t%uA0pgoff, int%uA0flags)
描述
remap_file_pages()%uA0系统调用是用来建立一个非线性映射,也就是,在该文件的页被映射到存储器中的非连续的顺序映射. The advantage of using%uA0remap_file_pages() over using repeated calls to%uA0mmap(2) is that the former approach does not require the kernel to create additional VMA (Virtual Memory Area) data structures.要创建一个非线性映射,我们执行以下步骤:
标签 | 描述 |
---|---|
1. | Use%uA0mmap() to create a mapping (which is initially linear). This mapping must be created with the%uA0MAP_SHARED%uA0flag. |
2. | Use one or more calls to%uA0remap_file_pages() to rearrange the correspondence between the pages of the mapping and the pages of the file. It is possible to map the same page of a file into multiple locations within the mapped region. |
The%uA0start%uA0argument serves two purposes. First, it identifies the mapping whose pages we want to rearrange. Thus,%uA0start%uA0must be an address that falls within a region previously mapped by a call to%uA0mmap(). Second,%uA0start%uA0specifies the address at which the file pages identified by%uA0pgoff%uA0and%uA0size%uA0will be placed.
The values specified in%uA0start%uA0and%uA0size%uA0should be multiples of the system page size. If they are not, then the kernel rounds%uA0both%uA0values%uA0down%uA0to the nearest multiple of the page size.
The%uA0prot%uA0argument must be specified as 0.
The%uA0flags%uA0argument has the same meaning as for%uA0mmap(), but all flags other thanMAP_NONBLOCK%uA0are ignored.
返回值
On success,%uA0remap_file_pages() returns 0. On error, -1 is returned, and%uA0errno%uA0is set appropriately.注意
The%uA0remap_file_pages() system call appeared in Linux 2.5.46.错误
标签 | 描述 |
---|---|
EINVAL | start%uA0does not refer to a valid mapping created with theMAP_SHARED%uA0flag. |
EINVAL | start,%uA0size,%uA0prot, or%uA0pgoff%uA0is invalid. |