数码相框-文件模块

file模块的主要功能 :
  文件的映射操作及文件夹操作

  
文件模块只有一个文件file.c,前面是对文件的映射操作,后面是对文件夹的操作。

typedef struct FileMap {
	char strFileName[256];  		 /* 文件名 */
	// int iFd; 
	FILE * tFp;              		/* 文件句柄 */
	int iFileSize;           		/* 文件大小 */
	unsigned char *pucFileMapMem;   /* 使用mmap函数映射文件得到的内存 */
}T_FileMap, *PT_FileMap;

使用mmap函数映射一个文件到内存,以后就可以直接通过内存来访问文件。

int MapFile(PT_FileMap ptFileMap){
	int iFd;
    FILE *tFp;
	struct stat tStat;
	
	tFp = fopen(ptFileMap->strFileName, "r+");	// 打开文件
	ptFileMap->tFp = tFp;
	fstat(iFd, &tStat);							//获得统计信息
	ptFileMap->iFileSize = tStat.st_size;
	ptFileMap->pucFileMapMem = (unsigned char *)mmap(NULL , tStat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, iFd, 0);	//映射文件	
	return 0;
}

void UnMapFile(PT_FileMap ptFileMap){
	munmap(ptFileMap->pucFileMapMem, ptFileMap->iFileSize);	//取消映射
	fclose(ptFileMap->tFp);		//关闭文件
}
static int isDir(char *strFilePath, char *strFileName)	//判断一个文件是否为目录
static int isRegDir(char *strDirPath, char *strSubDirName)	//判断一个目录是否常规的目录,在本程序中把sbin等目录当作特殊目录来对待
static int isRegFile(char *strFilePath, char *strFileName)	//判断一个文件是否常规的文件,设备节点/链接文件/FIFO文件等是特殊文件
int GetDirContents(char *strDirName, PT_DirContent **pptDirContents, int *piNumber)	//把某目录下所含的顶层子目录、顶层文件都记录下来,并且按名字排序
void FreeDirContents(PT_DirContent *aptDirContents, int iNumber)	//GetDirContents的清理函数,用来释放内存
功能描述: 以深度优先的方式获得目录下的文件 
           即: 先获得顶层目录下的文件, 再进入一级子目录A
               再获得一级子目录A下的文件, 再进入二级子目录AA, ...
               处理完一级子目录A后, 再进入一级子目录B
"连播模式"下调用该函数获得要显示的文件
有两种方法获得这些文件:
  1. 事先把所有文件的名字保存到某个缓冲区中
  2. 用到时再去搜索取出若干个文件名
第1种方法比较简单,但是当文件很多时有可能导致内存不足.
我们使用第2种方法:
假设某目录(包括所有子目录)下所有的文件都给它编一个号
int GetFilesIndir(char *strDirName, int *piStartNumberToRecord, int *piCurFileNumber, int *piFileCountHaveGet, int iFileCountTotal, char apstrFileNames[][256])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值