vm_mmap_linux32.c

来自「这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数」· C语言 代码 · 共 147 行

C
147
字号
/*////                  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 + =
减小字号Ctrl + -
显示快捷键?