C语言 文件映射

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值