|
文件操作
所謂文件系統,是指對一個存儲設備上的數據和元數據組織機制,在MTK平臺中簡稱FS ,它有以下特性:
1、支持FAT-16,FAT-32
2、支持FAT格式
3、長文件名-255字符
4、支持UNICODE
5,支持軟盤、閃存、SRAM
6、支持緩存
7、支持多任務
8、支持安裝設備驅動
注意:FAT在模擬器中,存放路徑為:\plutommi\WIN32FS\
8.7.1、常用函數
下面介紹與常用函數相關的兩個重要的文件:
1、fs_func.h
該文件主要用來聲明函數,具體代碼如下:
// General I/O
extern int FS_Open(const WCHAR * FileName, UINT Flag);
extern int FS_OpenHint(const WCHAR * FileName, UINT Flag, FS_FileLocationHint * DSR_Hint);
extern int FS_Close(FS_HANDLE FileHandle);
extern int FS_CloseAll(void);
extern int FS_Read(FS_HANDLE FileHandle, void * DataPtr, UINT Length, UINT * Read);
extern int FS_Write(FS_HANDLE FileHandle, void * DataPtr, UINT Length, UINT * Written);
extern int FS_SetSeekHint(FS_HANDLE FileHandle, UINT HintNum, FS_FileLocationHint * Hint);
extern int FS_Seek(FS_HANDLE FileHandle, int Offset, int Whence);
extern int FS_Commit(FS_HANDLE FileHandle);
extern int FS_ReleaseFH(void * TaskId);
extern int FS_Abort(UINT ActionHandle);
extern int FS_ParseFH(FS_HANDLE FileHandle);
extern int FS_GenVirtualFileName(FS_HANDLE FileHandle, WCHAR * VFileNameBuf, UINT BufLength, UINT VFBeginOffset, UINT VFValidLength);
//Information
extern int FS_GetFileInfo(FS_HANDLE FileHandle, FS_FileInfo * FileInfo);
extern int FS_GetFileSize(FS_HANDLE FileHandle, UINT * Size);
extern int FS_GetFilePosition(FS_HANDLE FileHandle, UINT * Position);
extern int FS_SetFileTime(FS_HANDLE FileHandle, const FS_DOSDateTime * Time);
extern int FS_GetAttributes(const WCHAR * FileName);
extern int FS_GetFirstCluster(FS_HANDLE FileHandle, UINT * Cluster);
2、FSSim_core.c
該文件主要功能為函數實現,代碼如下:
int FS_Open(const WCHAR *FileName, UINT Flag)
{
int fh = -1, is_exist, i;
unsigned int j, is_virtual, map_fh;
TCHAR strbuf[MAX_PATH], *pch;
DWORD access, share, create, attribute, error;
ASSERT(FileName != NULL);
__try {
if (fssim_mutex == NULL) {
fssim_init();
}
/* Virtual File Name Compare Hook */
if (wcsncmp(FileName, fssim_vfname_prefix, wcslen(fssim_vfname_prefix)) == 0) {
is_virtual = 1;
} else {
is_virtual = 0;
/* Stop irregular path input */
if (wcslen(FileName) >= MAX_PATH) {
return FS_PATH_OVER_LEN_ERROR;
}
/* convert file name (i.e., X:\ ==> DRIVE_X\) */
fssim_conv_fn(strbuf, FileName);
}
/* varify flags */ |
|