1. FAT FS 분석의 - 데이터 구조

1. 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;

좋은 웹페이지 즐겨찾기