📄 vm_mmap_linux32.c
字号:
/*//// INTEL CORPORATION PROPRIETARY INFORMATION// This software is supplied under the terms of a license agreement or// nondisclosure agreement with Intel Corporation and may not be copied// or disclosed except in accordance with the terms of that agreement.// Copyright(c) 2003-2005 Intel Corporation. All Rights Reserved.//*/#ifdef LINUX32#include <sys/types.h>#include <sys/mman.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include "vm_mmap.h"/* Set the mmap handle an invalid value */void vm_mmap_set_invalid(vm_mmap *handle){ /* check error(s) */ if (NULL == handle) return; handle->fd= -1; handle->address = NULL; handle->fAccessAttr = 0;} /* void vm_mmap_set_invalid(vm_mmap *handle) *//* Verify if the mmap handle is valid */int vm_mmap_is_valid(vm_mmap *handle){ /* check error(s) */ if (NULL == handle) return 0; return (-1 != handle->fd);} /* int vm_mmap_is_valid(vm_mmap *handle) *//* Map a file into system meory, return size of the mapped file */vm_sizet vm_mmap_create(vm_mmap *handle, vm_char *file, int fileAccessAttr){ size_t sizet; /* check error(s) */ if (NULL == handle) return 0; handle->address = NULL; handle->sizet = 0; if(FLAG_ATTRIBUTE_READ & fileAccessAttr) handle->fd = open(file, O_RDONLY); else handle->fd = open(file, O_RDWR | O_CREAT); if (-1 == handle->fd) return 0; sizet = lseek(handle->fd, 0, SEEK_END); lseek(handle->fd, 0, SEEK_SET); return sizet;} /* vm_sizet vm_mmap_create(vm_mmap *handle, vm_char *file, int fileAccessAttr) *//* Obtain a view of the mapped file, return the adjusted offset & size */void *vm_mmap_set_view(vm_mmap *handle, vm_sizet *offset, vm_sizet *sizet){ vm_sizet pagesize = getpagesize(); vm_sizet edge; /* check error(s) */ if (NULL == handle) return NULL; if (handle->address) munmap(handle->address,handle->sizet); edge = (*sizet) + (*offset); (*offset) = ((vm_sizet)((*offset) / pagesize)) * pagesize; handle->sizet = (*sizet) = edge - (*offset); handle->address = mmap(0, *sizet, PROT_READ, MAP_SHARED, handle->fd, *offset); return handle->address;} /* void *vm_mmap_set_view(vm_mmap *handle, vm_sizet *offset, vm_sizet *sizet) *//* Remove the mmap */void vm_mmap_close(vm_mmap *handle){ /* check error(s) */ if (NULL == handle) return; if (handle->address) { munmap(handle->address, handle->sizet); handle->address = NULL; } if (-1 != handle->fd) { close(handle->fd); handle->fd= -1; }} /* void vm_mmap_close(vm_mmap *handle) */vm_var32 vm_mmap_get_page_size(void){ return getpagesize();} /* vm_var32 vm_mmap_get_page_size(void) */vm_var32 vm_mmap_get_alloc_granularity(void){ return 16 * getpagesize();} /* vm_var32 vm_mmap_get_alloc_granularity(void) */void vm_mmap_unmap(vm_mmap *handle){ /* check error(s) */ if (NULL == handle) return; if (handle->address) { munmap(handle->address, handle->sizet); handle->address = NULL; }} /* void vm_mmap_unmap(vm_mmap *handle) */#endif /* LINUX32 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -