zoukankan      html  css  js  c++  java
  • 解决fastboot刷机内存消耗问题

    Windows实现方案及代码:

    //add by hthe
    void *mmap_file(const char *fn, unsigned *_sz)
    {
        HANDLE    file;
        HANDLE    mapfile;
        char     *data;
        DWORD     sz;
    
        file = CreateFile( fn,
                           GENERIC_READ,
                           FILE_SHARE_READ,
                           NULL,
                           OPEN_EXISTING,
                           0,
                           NULL );
    
        if (file == INVALID_HANDLE_VALUE)
            return NULL;
    
        sz = GetFileSize( file, NULL );
        data      = NULL;
    
    
        mapfile = CreateFileMapping(
        file,  		   // use paging file
        NULL,                  // default security
        PAGE_READONLY,         // read/write access
        0,                     // maximum object size (high-order DWORD)
        0,                	   // maximum object size (low-order DWORD)
        fn);   
    
        if (mapfile == INVALID_HANDLE_VALUE)
            return NULL;    
    
        if (sz > 0) {
    	data = (char*)MapViewOfFile(mapfile,   // handle to map object
            FILE_MAP_READ , 			// read
            0,
            0,
            sz);
    		
            if (data == NULL) {
                fprintf(stderr, "load_file: could not allocate %ld bytes
    ", sz );
                sz = 0;
            } 
        }
    	
        CloseHandle( file );
        *_sz = (unsigned) sz;
        return  data;
    }
    

     Linux实现方案及代码:

    //add by hthe
    void *mmap_file(const char *fn, unsigned *_sz)
    {
        char *data;
        int sz;
        int fd;
        int errno_tmp;
    
        data = 0;
        fd = open(fn, O_RDONLY);
        if(fd < 0) return 0;
    
        sz = lseek(fd, 0, SEEK_END);
        if(sz < 0) goto oops;
    
        if(lseek(fd, 0, SEEK_SET) != 0) goto oops;
    
        if((data = (char*)mmap(NULL, sz, PROT_READ, MAP_SHARED, fd, 0)) == (void*)-1) goto oops;
        
        if(_sz) *_sz = sz;
        close(fd);
        return data;
    
    oops:
        errno_tmp = errno;
        close(fd);
        if(data != 0) free(data);
        errno = errno_tmp;
        return 0;
    }
    
  • 相关阅读:
    常见mysql中出现的问题
    php 根据身份证号相关操作
    Linux的上传文件和下载文件
    php实现socket
    PHP开启缓存加速
    spark使用Hive表操作
    部署ganglia3.7
    Redis Cluster架构优化
    spark读取hdfs数据本地性异常
    spark join broadcast优化
  • 原文地址:https://www.cnblogs.com/ht-927/p/4258965.html
Copyright © 2011-2022 走看看