C语言 文件映射

#include 
#include 

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

你可能感兴趣的:(Windows编程)