亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kfs.c

?? kfs嵌入式文件系統(tǒng)1.0.1release版 作者:Eagle 來源:http://www.embseek.com 由embseek開發(fā)
?? C
字號(hào):
/*

filename : kfs.c

version : 1.0.1 release

author : eagle

web : www.embseek.com

*/
#include "kfs.h"

#include "kfsdev.h"

#include "str.h"

/*Data=========================================*/

/*file systen start address*/
u8 * fs_start_add;

/*file system length*/
u16  fs_len;

/*current head in the file system*/
u8 * fs_head_add;

/*table of the file head informations*/
struct fhead 			fheadtable[MAX_FILE_NUM];

/*totle file number in the file system*/
u16 					f_num;	

/*Operations===================================*/


/****************************************
function : r_fsinit
_fs_start_add : file systen start address
_fs_end_add : file system end address
description : init the file system
****************************************/
void r_fsinit(u8 *_fs_start_add,u8 *_fs_end_add){
	u8 * pf;
	u16 i;
	u8	state;//是否被格式化的標(biāo)記,文件系統(tǒng)第一個(gè)字節(jié)	
		
	fs_start_add=_fs_start_add+sizeof(u8)+sizeof(u8 *);
		
	fs_len=_fs_end_add-fs_start_add+1;
	f_num=0;
	
	kfsdev_read(_fs_start_add,&state,sizeof(u8));
	if(state==0x55){//file system has formated	
		
		kfsdev_read(_fs_start_add+sizeof(u8),(u8 *)&(fs_head_add),sizeof(u8 *));
		
		pf=fs_head_add;
			
		for(i=0;i<MAX_FILE_NUM;i++){
			kfsdev_read(pf,(u8 *)&(fheadtable[i]._status),sizeof(u16));
			if(!fheadtable[i]._status&FHS_FSEND){
				kfsdev_read(pf+sizeof(u16),(u8 *)&(fheadtable[i]._size),sizeof(u16));
				kfsdev_read(pf+sizeof(u16)*2,fheadtable[i].filename,MAX_FLIE_NAME_LEN);
				
				fheadtable[i]._f_sadd=pf+sizeof(struct fshead);
				
				pf+=sizeof(struct fshead)+fheadtable[i]._size;
				f_num++;
			}
		}
	}
	else{
		fs_head_add=fs_start_add;
		
		kfsdev_write(_fs_start_add+sizeof(u8),(u8 *)&(fs_head_add),sizeof(u8 *));
		
		state=0x55;
		
		kfsdev_write(_fs_start_add,&state,sizeof(u8));
	}
}

/****************************************
function : r_fopen
filename : file name less than 12byte
mode : Type of access permitted.
return : point to the opened file
description : open a file
****************************************/
r_FILE * r_fopen(u8 * filename, const u8 mode){
	u8 i;
	
	if(es_strlen(filename)>MAX_FLIE_NAME_LEN){
		
		
		return NULL;
	}
	
	
	for(i=0;i<f_num;i++){		
		if(es_strcmp(filename,fheadtable[i].filename))/*if file exist*/
		{			
			if(!(fheadtable[i]._status&FHS_DELETED)&&!(fheadtable[i]._status&FHS_OPENED))
			{
				fheadtable[i]._p=fheadtable[i]._f_sadd;
				return &fheadtable[i];				
			}
		}
	}
		
	/*file not exist , create a file*/
	if(mode&O_CREAT){
		if(f_num<MAX_FILE_NUM){
				
			fheadtable[f_num]._status=FHS_FSEND;
			es_strcpy(filename,fheadtable[f_num].filename,MAX_FLIE_NAME_LEN);
			fheadtable[f_num]._status|=FHS_NAMEMODIFIED;
			fheadtable[f_num]._status|=FHS_STATUEMODIFIED;
			
			if(f_num>=1){
				fheadtable[f_num]._f_sadd=fheadtable[f_num-1]._f_sadd+fheadtable[f_num-1]._size+sizeof(struct fshead);
			}else{
				fheadtable[f_num]._f_sadd=fs_head_add+sizeof(struct fshead);
			}
			
			
			fheadtable[f_num]._p=fheadtable[f_num]._f_sadd;
			
			fheadtable[f_num]._status|=FHS_OPENED;
			fheadtable[f_num]._size=0;
			fheadtable[f_num]._status|=FHS_SIZEMODIFIED;
			
			f_num++;
			
			return &fheadtable[f_num-1];
		}
	}		
	return NULL;
}

/****************************************
function : r_fdelete
fp : point to the FILE structure
return : if file was deleted return 1,else return 0;
description : delete a file ,please make sure that there are not any other file opened
****************************************/
void r_fdelete(r_FILE * *_fp){
	
	u8 i,j;
	
	r_FILE * fp,* fpt;
	fp=*_fp;
	
	if(fp==&fheadtable[0]){//file is the first file in the file system
		fp->_status=FHS_DELETED|FHS_STATUEMODIFIED;
		r_fsavehead(fp);		
		r_frmhead(fp);
		
		fs_head_add=fheadtable[0]._f_sadd-sizeof(struct fshead);
		
		kfsdev_write(fs_start_add-sizeof(u8*),(u8 *)&(fs_head_add),sizeof(u8 *));
		
	}else if(fp->_status&FHS_FSEND){	//file is in the end of the file system
		fp->_status=FHS_DELETED|FHS_STATUEMODIFIED|FHS_FSEND;
		r_fsavehead(fp);
	}else{		//file is not in the end of the file system
		j=0;
		
		fp->_status=FHS_DELETED|FHS_STATUEMODIFIED;
		for(i=0;i<f_num;i++){
			if(!(fheadtable[i]._status&FHS_DELETED)){
				j++;
			}
			if(fp==&fheadtable[i]){
				if(j>0){//file is in the middle of the file system
					//徹底刪除文件,移動(dòng)后面的文件
					//請(qǐng)確保當(dāng)前文件之后的文件未被打開
					f_num--;
					for(j=i;j<f_num;j++){
						fpt=&fheadtable[j+1];
						fp->_size=fpt->_size;
						es_strcpy(fpt->filename,fp->filename,MAX_FLIE_NAME_LEN);
						fp->_status=fpt->_status;
						fp->_status|=FHS_SIZEMODIFIED|FHS_STATUEMODIFIED|FHS_NAMEMODIFIED;
						
						r_rewind(fp);
						r_rewind(fpt);
						
						for(i=0;i<fp->_size;i++){
							r_fputc(fp,r_fgetc(fpt));
						}
						r_fsavehead(fp);
						fpt->_f_sadd=fp->_f_sadd+fp->_size+sizeof(struct fshead);
						fp=fpt;						
					}
					*_fp=NULL;
				}
				else{
					r_fsavehead(fp);
					return;
				}
			}
		}
	}
}


/****************************************
function : r_rewind
fp : point to the FILE structure
description : rewind a file to head
****************************************/
void r_rewind(r_FILE *fp){
	fp->_p=fp->_f_sadd;
}


//從fp指向的用戶操作文件中取出當(dāng)前文件指針指向的數(shù)據(jù)(u8類型),并將文件指針的當(dāng)前文件指針地址加1;
/****************************************
function : r_fgetc
fp : point to the FILE structure
return : the character read from the file
description : get a character from the file
****************************************/
u8 r_fgetc(r_FILE * fp){
	u8 ret=0;	
	if(r_feof(fp)){
		return ret;
	}else{
		if(fp->_p>fs_start_add+fs_len-1){
			kfsdev_read(fp->_p-fs_len,&ret,1);
		}else{			
			kfsdev_read(fp->_p,&ret,1);
		}
		fp->_p++;	
	}
	return ret;
}


//向fp指向的用戶操作文件中文件指針指向的數(shù)據(jù)(u8類型)地址寫入一個(gè)字符,并將文件指針的當(dāng)前文件指針地址加1;
/****************************************
function : r_fputc
fp : point to the FILE structure
ch : character to put to file
return : if success return 1,else return 0
description : put a character to file
****************************************/
u8 r_fputc(r_FILE * fp ,u8 ch){
	u8 ret=0;
	if(fp->_p-(fs_len)>=fs_head_add){
		/*超出文件系統(tǒng)長度*/
		return 0;
	}
	if(r_feof(fp)){
		if(fp->_status&FHS_FSEND){
			fp->_size+=0x01;			
			if(fp->_p>fs_start_add+fs_len-1){
				kfsdev_write(fp->_p-fs_len,&ch,1);
			}else{			
				kfsdev_write(fp->_p,&ch,1);
			}
			fp->_p+=1;
			ret=1;
			fp->_status|=FHS_SIZEMODIFIED;
		}
	}else{
		if(fp->_p>fs_start_add+fs_len-1){
			kfsdev_write(fp->_p-fs_len,&ch,1);
		}else{			
			kfsdev_write(fp->_p,&ch,1);
		}
		fp->_p+=1;	
		ret=1;
	}
	return ret;
}


//判斷是否到達(dá)文件末尾;是則返回1
/****************************************
function : r_feof
fp : point to the FILE structure
return : if end return 1,else return 0
description : check if got the end of file
****************************************/
u8 r_feof(r_FILE * fp){
	u8 ret=0;
	if(fp->_p==fp->_f_sadd+fp->_size)
		ret=1;	
	return ret;
}



//關(guān)閉fp指向的文件
/****************************************
function : r_fclose
fp : point to the FILE structure
description : close the file
****************************************/
void r_fclose(r_FILE * * fp){
	if(*fp==NULL)
		return;
	(*fp)->_status&=~FHS_OPENED;
		
	r_rewind(*fp);
	
	if((*fp)->_size==0){
		r_frmhead(*fp);
	}else{
		r_fsavehead(*fp);
	}
	*fp=NULL;
}

/****************************************
function : r_frmhead
fp : point to the FILE structure
description : remove the file head from 
				the head table
****************************************/
void r_frmhead(r_FILE * fp){
	u8 i,j;
	for(i=0;i<f_num;i++){
		if(fp==&fheadtable[i]){
			for(j=i;j<f_num-1;j++){
				fheadtable[j]._status=fheadtable[j+1]._status;
				fheadtable[j]._size=fheadtable[j+1]._size;
				fheadtable[j]._f_sadd=fheadtable[j+1]._f_sadd;
				fheadtable[j]._p=fheadtable[j+1]._p;
				es_strcpy(fheadtable[j+1].filename,fheadtable[j].filename,MAX_FLIE_NAME_LEN);				
			}
			f_num-=1;
			return;
		}
	}
}

/****************************************
function : r_fsavehead
fp : point to the FILE structure
description : save the file head
****************************************/
void r_fsavehead(r_FILE * fp){
	if(fp==NULL)
		return;
	if(fp->_status&FHS_SIZEMODIFIED){
		fp->_status&=~FHS_SIZEMODIFIED;		
		kfsdev_write(fp->_f_sadd-sizeof(struct fshead)+sizeof(u16),(u8 *)&(fp->_size),sizeof(u16));	
	}
	if(fp->_status&FHS_NAMEMODIFIED){
		fp->_status&=~FHS_NAMEMODIFIED;		
		kfsdev_write(fp->_f_sadd-sizeof(struct fshead)+sizeof(u16)*2,fp->filename,MAX_FLIE_NAME_LEN);	
	}
	if(fp->_status&FHS_STATUEMODIFIED){
		fp->_status&=~FHS_STATUEMODIFIED;	
		kfsdev_write(fp->_f_sadd-sizeof(struct fshead),(u8 *)&(fp->_status),sizeof(u16));		
	}
	
	if(fp->_status&FHS_FSEND&&f_num>=2){
		if(fheadtable[f_num-2]._status&FHS_FSEND){
			fheadtable[f_num-2]._status&=!FHS_FSEND;
			kfsdev_write(fheadtable[f_num-2]._f_sadd-sizeof(struct fshead),(u8 *)&(fheadtable[f_num-2]._status),sizeof(u16));			
		}
	}	
}


/****************************************
function : r_format
_fs_start_add : file systen start address
_fs_end_add : file system end address
description : format the file system
****************************************/
void r_format(u8 *_fs_start_add,u8 *_fs_end_add){
	
	u8	state;//是否被格式化的標(biāo)記,文件系統(tǒng)第一個(gè)字節(jié)	
	
	fs_start_add=_fs_start_add+sizeof(u8)+sizeof(u8 *);
		
	fs_len=_fs_end_add-fs_start_add+1;
	f_num=0;
	
	fs_head_add=fs_start_add;
		
	kfsdev_write(_fs_start_add+sizeof(u8),(u8 *)&(fs_head_add),sizeof(u8 *));
		
	state=0x55;
		
	kfsdev_write(_fs_start_add,&state,sizeof(u8));
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲在线视频一区| 亚洲美女电影在线| 色诱视频网站一区| 久久99精品国产| 亚洲精品午夜久久久| 精品国偷自产国产一区| 色视频成人在线观看免| 加勒比av一区二区| 国产欧美精品一区aⅴ影院 | 日韩高清不卡在线| 中文av字幕一区| 欧美一级片免费看| www.视频一区| 黄色资源网久久资源365| 亚洲国产另类av| 国产精品久久福利| 久久免费视频色| 欧美一级国产精品| 欧美日韩免费电影| 97se亚洲国产综合自在线观| 国产专区综合网| 日本欧美肥老太交大片| 洋洋成人永久网站入口| 国产精品久久久久久久久免费丝袜 | 欧美精品久久久久久久多人混战| 成人免费一区二区三区在线观看| 不卡视频一二三| 国产在线观看一区二区| 美腿丝袜在线亚洲一区| 午夜精品一区二区三区电影天堂 | 韩国成人精品a∨在线观看| 亚洲综合丁香婷婷六月香| 亚洲欧洲www| 国产欧美一区视频| 亚洲精品一区二区在线观看| 制服丝袜中文字幕一区| 欧美日韩一区二区三区不卡| 91成人在线精品| 一本久道久久综合中文字幕| 不卡一区中文字幕| 丁香激情综合五月| 成人ar影院免费观看视频| 成人综合激情网| 本田岬高潮一区二区三区| 成人福利视频在线看| 不卡av在线免费观看| www.亚洲国产| 国产欧美一区二区三区在线看蜜臀 | 国产在线观看一区二区| 老司机精品视频线观看86| 蜜桃精品在线观看| 免费在线观看视频一区| 久久99久久久久| 国产一区美女在线| 成人动漫av在线| 一本一道波多野结衣一区二区| 看片网站欧美日韩| 国产一区二区不卡老阿姨| 国产乱国产乱300精品| 国产九色sp调教91| 成人精品国产福利| 色综合 综合色| 91精品国产综合久久香蕉麻豆| www.99精品| 在线视频一区二区三| 欧美高清www午色夜在线视频| 风间由美一区二区av101| 粉嫩高潮美女一区二区三区| 91免费版pro下载短视频| 欧美日韩在线观看一区二区 | 亚洲高清不卡在线观看| 天天av天天翘天天综合网| 麻豆精品久久久| 成人午夜在线免费| 欧美色手机在线观看| 精品欧美乱码久久久久久1区2区| 欧美在线一区二区三区| 日韩欧美中文一区| 国产人成亚洲第一网站在线播放 | 在线精品视频一区二区三四| 91麻豆精品国产91久久久更新时间| 成人白浆超碰人人人人| 精品视频一区二区三区免费| 欧美va亚洲va| 最好看的中文字幕久久| 天天综合天天做天天综合| 国产精品一品二品| 欧美日韩精品是欧美日韩精品| 色噜噜夜夜夜综合网| 精品区一区二区| 一区二区三区四区乱视频| 久久99久久99精品免视看婷婷| 丝袜亚洲另类丝袜在线| 风间由美性色一区二区三区| 91麻豆精品视频| 欧美mv日韩mv国产网站app| 亚洲免费av观看| 久久99热这里只有精品| 91国产成人在线| 欧美经典一区二区三区| 天天综合天天做天天综合| 91一区二区三区在线观看| 日韩美女主播在线视频一区二区三区 | 一区二区三区影院| 国产精品一区2区| 欧美一区二视频| 亚洲欧美另类久久久精品2019| 亚洲免费在线观看视频| 六月婷婷色综合| 欧美日韩一区小说| 亚洲色欲色欲www| 国产精品一区二区久久不卡| 日韩一区二区电影| 亚洲国产视频一区| 色噜噜狠狠一区二区三区果冻| 在线观看视频欧美| 国产精品第一页第二页第三页| 国产精品伦一区| 国产在线乱码一区二区三区| 欧美精品一级二级三级| 亚洲精选一二三| av一区二区三区四区| 精品理论电影在线| 日本不卡不码高清免费观看| 欧美亚洲动漫另类| 一级女性全黄久久生活片免费| 天堂影院一区二区| 欧美日韩一本到| 亚洲电影中文字幕在线观看| 色综合天天综合给合国产| 国产精品欧美久久久久无广告| 亚洲美女在线一区| 91视频xxxx| 亚洲欧美日韩人成在线播放| 成人黄色av电影| 国产精品美女久久福利网站| 国产99精品视频| 国产精品美女久久久久久久网站| 亚洲精品日韩一| 99久久精品国产导航| 国产精品乱码人人做人人爱| 成人午夜激情片| 日韩毛片在线免费观看| 99精品国产热久久91蜜凸| 亚洲欧洲av色图| 在线亚洲免费视频| 午夜伊人狠狠久久| 91精品欧美综合在线观看最新| 国产女主播一区| 粉嫩一区二区三区在线看| 国产欧美日韩精品一区| av资源网一区| 一区二区三区中文在线观看| 欧美日韩在线播| 欧美96一区二区免费视频| 精品久久久久久久久久久久久久久久久 | 激情五月婷婷综合网| 久久综合狠狠综合| 懂色av一区二区夜夜嗨| 国产精品你懂的| 欧美性一二三区| 日本欧美一区二区三区乱码| 欧美tickle裸体挠脚心vk| 粉嫩高潮美女一区二区三区 | 韩国视频一区二区| 国产女人aaa级久久久级| 成人动漫一区二区三区| 亚洲一级电影视频| 精品国产电影一区二区| 波多野结衣91| 视频一区二区中文字幕| 久久日一线二线三线suv| 99国产精品99久久久久久| 亚洲无人区一区| www激情久久| 色偷偷一区二区三区| 美女性感视频久久| 成人免费一区二区三区在线观看| 国产乱一区二区| 亚洲日本乱码在线观看| 91精品久久久久久久99蜜桃 | 91精品国产综合久久久久久| 精品一区二区日韩| 国产亚洲精品资源在线26u| 色www精品视频在线观看| 免费成人美女在线观看| 中文字幕一区二| 日韩午夜激情av| 91麻豆精品在线观看| 国内久久精品视频| 亚洲午夜视频在线| 国产免费观看久久| 欧美日本在线观看| av在线不卡网| 九九九精品视频| 亚洲成人午夜电影| 国产精品护士白丝一区av| 欧美α欧美αv大片| 欧美亚一区二区| www.亚洲免费av|