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;
}
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,