Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Определим необходимые заголовочные файлы:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/msdos_fs.h>
#include "split.h"
Заголовочный файл split.h имеет следующее содержание:
#include <linux/types.h>
#define SHORT_NAME 13 // максимальная длина короткого имени файла
struct split_name {
__u8 name[9]; // имя файла
__u8 ext[4]; // расширение файла
int name_len, // длина имени файла
ext_len; // длина расширения файла
};
Cтруктура split_name предназначена для хранения составных частей короткого имени файла (имени и расширения) и их длин.
В заголовочном файле <linux/msdos_fs.h> определены структурные типы, описывающие основные компоненты файловой системы FAT – загрузочный сектор, сектор FSInfo, структуры элементов каталога для короткого и длинного имён файлов.
Рассмотрим кратко поля, которые входят в каждую из этих структур.
1. Структура загрузочного сектора struct fat_boot_sector:
n __s8 system_id[8] – системный идентификатор;
n __u8 sector_size[2] – размер сектора в байтах;
n __u8 cluster_size – размер кластера в секторах;
n __u16 reserved – число резервных секторов в резервной области раздела;
n __u8 fats – количество копий FAT;
n __u8 dir_entries[2] – количество 32-байтных дескрипторов файлов в корневом каталоге;
n __u8 sectors[2] – число секторов на разделе; если это поле равно 0, используется поле total_sect;
n __u8 media – тип носителя, на котором создана файловая система;
n __u16 fat_length – размер FAT в секторах;
n __u32 total_sect – размер раздела FAT в секторах (если поле sectors == 0).
Следующие поля данной структуры используются только FAT32:
n __u32 fat32_length – размер FAT32 в секторах;
n __u32 root_cluster – номер первого кластера корневого каталога;
n __u16 info_sector – номер сектора, содержащего структуру FSInfo.
2. Структура сектора FSInfo struct fat_boot_fsinfo:
n __u32 signature1 – сигнатура 0x41615252;
n __u32 signature2 – сигнатура 0x61417272;
n __u32 free_clusters – количество свободных кластеров. Если поле содержит -1, поиск свободных кластеров нужно начинать с кластера номер 2.
3. Структура элемента каталога короткого имени struct msdos_dir_entry:
n __s8 name[8],ext[3] – имя и расширение файла;
n __u8 attr – атрибуты файла;
n __u8 ctime_ms – это поле уточняет время создания файла до мс (используется только FAT32);
n __u16 ctime – время создания файла (используется только FAT32);
n __u16 cdate – дата создания файла (используется только FAT32);
n __u16 adate – дата последнего доступа к файлу (используется только FAT32);
n __u16 starthi – старшие 16 бит номера первого кластера файла (используется только FAT32);
n __u16 time,date,start – время и дата создания файла, номер первого кластер файла;
n __u32 size – размер файла (в байтах).
4. Структура элемента каталога длинного имени:
n __u8 id – номер элемента;
n __u8 name0_4[10] – символы 1 – 5 имени;
n __u8 attr – атрибуты файла;