4。如何在你的系统中使用kfs文件系统
要在你的系统中使用kfs文件系统你只需要简单的几步:
第一步,就是按照《kfs嵌入式文件系统应用指南(一)》中的方法建立基于你系统的驱动。
第二步,在你的程序主入口函数中对文件系统进行初始化。你需要提供用于建立文件系统的存储器的起始地址和结束地址,并使用kfs初始化函数进行初始化。
r_fsinit(fs_start_address,fs_end_address);
注:其中fs_start_address为文件系统在存储器中的首地址,fs_end_address为文件系统在存储器中的尾地址,文件系统信息
初始化之后就可以在你的系统中使用kfs提供的文件操作函数来进行基本的文件操作。
5。kfs提供的文件操作函数说明如下
/****************************************
function : r_fopen
filename : file name less than 12byte
mode : Type of access permitted.
return : point to the opened file
description : open a file
****************************************/
extern r_FILE * r_fopen(u8 * filename, const u8 mode);
说明:用于打开或创建一个文件,其中filename是要打开的文件名,按照系统配置的MAX_FLIE_NAME_LEN,确定文件名最长值。mode为r_fopen的操作模式,在1.0.3版本中提供两种模式,O_WRONLY只是打开用于读写,若不存在则返回空文件指针,O_WRONLY|O_CREAT,即打开文件,若不存在则创建新文件,
注意:文件在打开之后必须执行r_fclose关闭文件,否则在文件读写操作之后,文件信息改变,将不会保存至存储器中,造成信息丢失。还有一点,在创建一个新文件后,文件信息不会立即写入存储器,只有在执行r_fclose操作之后,且文件中写入数据,kfs才会将文件信息写入存储器中。
/****************************************
function : r_fdelete
fp : point to the FILE structure
return : if file was deleted return 1,/
else return 0;
description : delete a file
****************************************/
extern void r_fdelete(r_FILE * *_fp);
说明:删除文件,在使用此接口时,首先需要用r_fopen打开要删除的文件,然后再执行删除操作,最后还需要关闭文件指针以保存操作结果。
例:
...... r_FILE * fp=r_fopen("file1",O_WRONLY); if(fp){ r_fdelete(&fp); } r_fclose(&fp); ...... |
/****************************************
function : r_rewind
fp : point to the FILE structure
description : rewind a file to head
****************************************/
extern void r_rewind(r_FILE *fp);
说明:移动文件指针到文件头,在读写文件时使用。
//从fp指向的用户操作文件中取出当前文件指针指向的数据(u8类型),并将文件指针的当前文件指针地址加1;
/****************************************
function : r_fgetc
fp : point to the FILE structure
return : the character read from the file
description : get a character from the file
****************************************/
extern u8 r_fgetc(r_FILE * fp);
说明:从文件中读取一个字节的数据,并将文件指针向后移动一个字节。
//向fp指向的用户操作文件中文件指针指向的数据(u8类型)地址写入一个字符,并将文件指针的当前文件指针地址加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
****************************************/
extern u8 r_fputc(r_FILE * fp ,u8 ch);
说明:向文件指针当前指向的位置中写入一个字节的数据,并将文件指针向后移动一个字节,如果操作成功则返回true(1),如果文件空间不够无法正确写入数据则操作失败,返回false(0)。
注意:当当前文件指针已经到达文件末尾时,会自动为文件重新分配空间,如果分配空间成功,则继续写入数据,如果文件分配失败则返回。由于kfs文件系统是连续分布的,因此,一般情况下只有在文件系统尾部的文件才可成功分配空间。
//判断是否到达文件末尾;
/****************************************
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
****************************************/
extern u8 r_feof(r_FILE * fp);
说明:用于判断文件指针是否已经到达文件末尾。
//关闭fp指向的文件
/****************************************
function : r_fclose
fp : point to the FILE structure
description : close the file
****************************************/
extern void r_fclose(r_FILE * * fp);
说明:关闭文件指针。所有打开的文件在操作结束之后必须执行关闭文件操作,否则文件信息无法正确保存,因此一个一般的文件操作过程应该如下:
...... // 打开文件,文件名为"file1",打开方式为读写方式 r_FILE * fp=r_fopen("file1",O_WRONLY); if(fp){ r_rewind(&fp); u8 ch=r_fgetc(fp); ....... // 执行文件操作 } // 关闭文件 r_fclose(&fp); ...... |
/****************************************
function : r_frmhead
fp : point to the FILE structure
description : remove the file head from
the head table
****************************************/
extern void r_frmhead(r_FILE * fp);
说明:删除文件头信息,辅助函数,提供更底层的文件头操作
/****************************************
function : r_fsavehead
fp : point to the FILE structure
description : save the file head
****************************************/
extern void r_fsavehead(r_FILE * fp);
说明:保存文件头信息,辅助函数,用于直接操作内存中的文件头信息,本函数将RAM中的文件头信息保存至存储器
/****************************************
function : r_format
_fs_start_add : file systen start address
_fs_end_add : file system end address
description : format the file system
****************************************/
extern void r_format(u8 *_fs_start_add,u8 *_fs_end_add);
说明:格式化文件系统,参数同文件系统初始化接口,辅助函数,通常在文件系统工作不正常时使用。用于强制格式化文件系统。格式化后文件系统中所有的数据将会丢失。
使用:
...... r_format(0x00,0xff); ...... |
(未完 ,待续。。。。)
转载请注明出处,www.embseek.com by Eagle 谢谢