1. FAT FS 분석의 - 데이터 구조
6852 단어 파일 시스템 FAT FS
파일 시스템 의 주요 데이터 구 조 는 모두 ff. h 안에 놓 여 있다.
1. File system object structure
파일 시스템 의 가장 주요 한 데이터 구 조 는 파일 시스템 의 기본 정 보 를 저장 하 는 데 사용 된다. 예 를 들 어 파일 시스템 유형, 섹 터 크기, 클 러 스 터 의 섹 터 수, FAT 표 의 위치 와 크기 등 중요 한 정 보 를 저장 하 는 데 사용 된다.
typedefstruct {
BYTE fs_type; /* FAT 하위 형식, Mount 에 0 을 설치 하면 마 운 트 하지 않 음 */
BYTE drv; /* 물리 구동 번호 */
BYTE csize; /* Sectors per cluster (1,2,4...128) */ 각 클 러 스 터 영역 수
BYTE n_fats; /* FAT 표 수 */
BYTE wflag; /* win[] dirtyflag (1:must be written back) */ 태그 파일 이 변경 되 었 는 지 여부
BYTE fsi_flag; /* fsinfodirty flag (1: must be written back) */파일 시스템 을 표시 할 때 변경 되 었 는 지 여부
WORD id; /*File system mount ID */파일 시스템 마 운 트 ID
WORD n_rootdir; /* Number ofroot directory entries (FAT12/16) */ FAT 12/16 에 사 용 된 것 으로 여 기 는 깊이 연구 하지 않 습 니 다.
#if_MAX_SS != 512
WORD ssize; /* Bytes per sector (512, 1024, 2048, 4096) */각 섹 터 바이트 수
#endif
\# if FS REENTRANTfs reentrant, 재 입력 허용
_SYNC_t sobj; /*Identifier of sync object *//동기 화 대상 생 성
#endif
\# if! FS READOnlY/읽 기 전용 모드
DWORD last_clust; /* Last allocated cluster*/
DWORD free_clust; /* Number of freeclusters */
DWORD fsi_sector; /* fsinfo sector (FAT32)*/
#endif
\# if FS RPATH//상대 경 로 를 설명 합 니 다.
DWORD cdir; /* Currentdirectory start cluster (0:root) */
#endif
DWORD n_fatent; /* Number of FAT entries (= number of clusters + 2) */FAT 입구
DWORD fsize; /* Sectors per FAT */각 FAT 가 차지 하 는 섹 터
DWORD fatbase; /* FAT start sector */FAT 테이블 시작 섹 터
DWORD dirbase; /* Rootdirectory start sector (FAT 32: Cluster\#) */루트 디 렉 터 리 섹 터
DWORD database; /* Data startsector */데이터 디 렉 터 리 섹 터
DWORD winsect; /* Currentsector appearing in the win [] */현재 버퍼 에 저 장 된 부채 번호
BYTE win[_MAX_SS]; /* Disk access window forDirectory, FAT (and Data on tiny cfg) */
}FATFS;
2. File object structure
이 구조 체 는 파일 에 대한 정 보 를 저장 합 니 다 ().파일 시스템 의 상부 인터페이스 함 수 를 호출 하려 면 반드시 만들어 야 할 실체 입 니 다.
typedefstruct {
FATFS*fs; /*Pointer to the owner file system object */파일 소재 FS
WORD id; /*Owner file system mount ID */소재 FS 마 운 트 번호
BYTE flag; /* 파일 status flags */파일 상태 표시
BYTE pad1; //어떤 역할 을 하 는 지 알 수 없습니다. 이전 버 전 이 자리: 섹 터 오프셋
DWORD fptr; /* Fileread/write pointer */파일 읽 기와 쓰기 지침
DWORD fsize; /* 파일 크기 */파일 크기
DWORD org_clust; /* File startcluster (0 when fsize = = 0) */파일 시작 섹 터
DWORD curr_clust; /* 현재 클 러 스 터 */현재 클 러 스 터
DWORD dsect; /* 현재 data sector */데이터 현재 섹 터
\# if! FS READOnlY 읽 기 전용 모드
DWORD dir_sect; /* Sectorcontaining the directory entry */
BYTE* dir_ptr; /* Ponter to the directory entry in the window */
#endif
#if_USE_FASTSEEK
DWORD* cltbl; /* Pointer to the cluster link map table (null on file open) */지향 클 러 스 터 링크 맵 테이블
#endif
#if_FS_SHARE
UINT lockid; /* File lock ID (index of file semaphore table) */
#endif
#if!_FS_TINY
BYTE buf[_MAX_SS]; /* File data read/write buffer*/
#endif
}FIL;
3. Directory object structure
파일 디 렉 터 리 구조 체 는 파일 시스템 이 디 렉 터 리 작업 을 처리 할 때 사용 하 는 구조 체 입 니 다.
typedefstruct {
FATFS*fs; /*Pointer to the owner file system object */
WORD id; /* Owner file system mount ID */
WORD index; /* Currentread/write index number */
DWORD sclust; /*Table start cluster (0:Root dir) */
DWORD clust; /* Current cluster */
DWORD sect; /* Currentsector */
BYTE* dir; /*Pointer to the current SFN entry in the win[] */
BYTE* fn; /*Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
#if_USE_LFN
WCHAR* lfn; /* Pointer to the LFN working buffer */
WORD lfn_idx; /*Last matched LFN index number (0xFFFF:No LFN) */
#endif
}DIR;
4. File status structure (FILINFO)
파일 디 렉 터 리 항목 정 보 를 기록 하 는 데이터 구조 입 니 다. 이 구 조 는 파일 이름 13 글자 (8 +. + 3 +\0), 속성, 수정 시간 등 을 포함 합 니 다.
typedefstruct {
DWORD fsize; /* File size */
WORD fdate; /* Last modifieddate */
WORD ftime; /* Last modifiedtime */
BYTE fattrib; /*Attribute */
TCHAR fname[13]; /* Short file name(8.3 format) */
#if_USE_LFN
TCHAR* lfname; /* Pointer tothe LFN buffer */
UINT lfsize; /* Size of LFN buffer in TCHAR */
#endif
}FILINFO;
5. 공유 제어 에 사용 되 는 구조 체.
typedefstruct {
FATFS*fs; /* File ID 1, volume (NULL:blank entry) */
DWORDclu; /* File ID 2, directory */
WORDidx; /* File ID 3, directory index */
WORDctr; /* File open counter, 0:none, 0x01..0xFF:read open count, 0x100:write mode */
}FILESEM;
6. File function return code
typedefenum {
FR_OK =0, /* (0) Succeeded */
FR_DISK_ERR, /* (1) A hard error occured in the low level disk I/O layer */
FR_INT_ERR, /* (2) Assertion failed */
FR_NOT_READY, /* (3) The physical drive cannot work */
FR_NO_FILE, /* (4) Could not find the file */
FR_NO_PATH, /* (5) Could not find the path */
FR_INVALID_NAME, /* (6) The path nameformat is invalid */
FR_DENIED, /* (7) Acces denied due to prohibited access or directory full */
FR_EXIST, /* (8) Acces denied due to prohibited access */
FR_INVALID_OBJECT, /* (9) The file/directoryobject is invalid */
FR_WRITE_PROTECTED, /* (10) The physical drive is writeprotected */
FR_INVALID_DRIVE, /* (11) The logical drivenumber is invalid */
FR_NOT_ENABLED, /* (12) Thevolume has no work area */
FR_NO_FILESYSTEM, /* (13) There is no validFAT volume on the physical drive */
FR_MKFS_ABORTED, /* (14) The f_mkfs()aborted due to any parameter error */
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
FR_TOO_MANY_OPEN_FILES/* (18) Number of open files > _FS_SHARE */
}FRESULT;