#include <windows.h>
#include <stdio.h>
typedef struct
{
HANDLE hFile;
HANDLE hMapping;
PVOID p;
char *mem;
int ok;
} FP;
void CloseF(FP *fp)
{
if(fp==NULL) return;
if (fp->hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(fp->hFile);
}
if (fp->hMapping != NULL)
{
CloseHandle(fp->hMapping);
}
if (fp->p != NULL)
{
UnmapViewOfFile(fp->p);
}
free(fp);
}
FP *OpenF(char *path)
{
FP* fp = (FP*)malloc(sizeof(FP));
if(fp==NULL) return NULL;
fp->hFile = CreateFileA(path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
fp->hMapping = CreateFileMapping(fp->hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
fp->mem = fp->p = MapViewOfFile(fp->hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (fp->hFile == INVALID_HANDLE_VALUE || fp->hMapping == NULL || fp->p == NULL)
{
CloseF(fp);
return NULL;
}
return fp;
}
int main(int argc, char * agrv[])
{
FP* fp = OpenF("a.txt");
if(fp==NULL) return 0;
printf("%d\n", fp->mem[0]);
CloseF(fp);
return 0;
}
C语言 文件映射
最新推荐文章于 2023-10-06 07:50:17 发布