⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vm_mmap_win32.c

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 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.//*/#if defined(_WIN32) || defined(_WIN64) || defined(_WIN32_WCE)#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_file     = NULL;    handle->address     = NULL;    handle->fd_map      = 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 (int)(NULL != handle->fd_map);} /* int vm_mmap_is_valid(vm_mmap *handle) *//* Map a file into system meory, return the file size */vm_sizet vm_mmap_create(vm_mmap *handle, vm_char *file, int fileAccessAttr){    LARGE_INTEGER sizet;    /* check error(s) */    if (NULL == handle)        return 0;    handle->fd_map = NULL;    handle->address = NULL;    if (FLAG_ATTRIBUTE_READ & fileAccessAttr)    {#ifdef _WIN32_WCE        handle->fd_file = CreateFileForMapping(file,                                               GENERIC_READ,                                               FILE_SHARE_READ,                                               NULL,                                               OPEN_EXISTING,                                               FILE_ATTRIBUTE_NORMAL,                                               NULL);#else /* !_WIN32_WCE */        handle->fd_file = CreateFile(file,                                     GENERIC_READ,                                     FILE_SHARE_READ,                                     NULL,                                     OPEN_EXISTING,                                     FILE_ATTRIBUTE_READONLY|FILE_FLAG_RANDOM_ACCESS,                                     0);#endif /* _WIN32_WCE */        if (INVALID_HANDLE_VALUE == handle->fd_file)            return 0;        sizet.LowPart = GetFileSize(handle->fd_file, (LPDWORD) &sizet.HighPart);        handle->fd_map = CreateFileMapping(handle->fd_file,                                           NULL,                                           PAGE_READONLY,                                           sizet.HighPart,                                           sizet.LowPart,                                           0);    }    else    {#ifdef _WIN32_WCE        handle->fd_file = CreateFileForMapping(file,                                               GENERIC_WRITE|GENERIC_READ,                                               FILE_SHARE_WRITE,                                               NULL,                                               CREATE_ALWAYS,                                               FILE_ATTRIBUTE_NORMAL,                                               NULL);#else /* !_WIN32_WCE */        handle->fd_file = CreateFile(file,                                     GENERIC_WRITE|GENERIC_READ,                                     FILE_SHARE_WRITE,                                     NULL,CREATE_ALWAYS,                                     FILE_ATTRIBUTE_NORMAL,                                     0);#endif /* _WIN32_WCE */        if (INVALID_HANDLE_VALUE == handle->fd_file)            return 0;        sizet.LowPart  = 0;        sizet.HighPart = 1;        handle->fd_map = CreateFileMapping(handle->fd_file,                                           NULL,                                           PAGE_READWRITE,                                           0,                                           sizet.LowPart,                                           0);        sizet.LowPart  = 1024 * 1024 * 1024;        sizet.HighPart = 0;        while (!handle->fd_map)        {            DWORD error;            handle->fd_map = CreateFileMapping(handle->fd_file,                                               NULL,                                               PAGE_READWRITE,                                               0,                                               sizet.LowPart,                                               0);            error = GetLastError();            if (ERROR_NOT_ENOUGH_MEMORY == error || ERROR_DISK_FULL == error)                sizet.LowPart /= 2;            else                break;        }    }    handle->fAccessAttr = fileAccessAttr;    if (FLAG_ATTRIBUTE_READ & fileAccessAttr || 16*1024*1024 <= sizet.LowPart)    {        if (handle->fd_map)            return (vm_sizet) sizet.QuadPart;    }    vm_mmap_close(handle);    return 0;} /* vm_sizet vm_mmap_create(vm_mmap *handle, vm_char *file, int fileAccessAttr) *//* Obtain the a view of the mapped file */void *vm_mmap_set_view(vm_mmap *handle, vm_sizet *offset, vm_sizet *sizet){    LARGE_INTEGER t_offset;    LARGE_INTEGER t_sizet;    SYSTEM_INFO info;    vm_sizet pagesize;    vm_sizet edge;    /* check error(s) */    if (NULL == handle)        return NULL;    if (handle->address)        UnmapViewOfFile(handle->address);    GetSystemInfo(&info);    pagesize = info.dwAllocationGranularity;    edge = (*sizet) + (*offset);    t_offset.QuadPart =    (*offset) = (vm_sizet)((*offset) / pagesize) * pagesize;    t_sizet.QuadPart = (*sizet) = edge - (*offset);    if (FLAG_ATTRIBUTE_READ & handle->fAccessAttr)    {        handle->address = MapViewOfFile(handle->fd_map,                                        FILE_MAP_READ,                                        t_offset.HighPart,                                        t_offset.LowPart,                                        t_sizet.LowPart);    }    else    {        handle->address = MapViewOfFile(handle->fd_map,                                        FILE_MAP_WRITE,                                        t_offset.HighPart,                                        t_offset.LowPart,                                        t_sizet.LowPart);    }    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)    {        UnmapViewOfFile(handle->address);        handle->address = NULL;    }    if (handle->fd_map)    {        CloseHandle(handle->fd_map);        handle->fd_map = NULL;    }    if (INVALID_HANDLE_VALUE != handle->fd_file)    {        CloseHandle(handle->fd_file);        handle->fd_file = INVALID_HANDLE_VALUE;    }} /* void vm_mmap_close(vm_mmap *handle) *//*  Return page size*/vm_var32 vm_mmap_get_page_size(void){    SYSTEM_INFO info;    GetSystemInfo(&info);    return info.dwPageSize;} /* vm_var32 vm_mmap_get_page_size(void) */vm_var32 vm_mmap_get_alloc_granularity(void){    SYSTEM_INFO info;    GetSystemInfo(&info);    return info.dwAllocationGranularity;} /* 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)    {        UnmapViewOfFile(handle->address);        handle->address = NULL;    }} /* void vm_mmap_unmap(vm_mmap *handle) */#endif /* defined(_WIN32) || defined(_WIN64) || defined(_WIN32_WCE) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -