Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
n __u8 alias_checksum – контрольная сумма короткого имени;
n __u8 name5_10[12] – символы 6 – 11 имени;
n __u8 name11_12[4] – символы 12 – 13 имени.
Продолжим рассмотрение программной реализации алгоритма и определим имя раздела, на котором создана файловая система FAT16:
#ifndef FAT16_PART_NAME
#define FAT16_PART_NAME "/dev/hda1"
#endif
Глобальные структуры:
struct fat_boot_sector fbs; // структура загрузочного сектора
struct msdos_dir_entry dentry; // структура элемента каталога
Глобальные переменные:
__u16 *fat16; // сюда копируем таблицу FAT16
__u16 sector_size; // размер сектора (из FAT16)
__u16 dir_entries; // число 32-байтных дескрипторов
// в root-каталоге (0 для FAT32)
__u16 sectors; // общее число секторов в разделе
__u32 fat16_size; // размер FAT16
__u32 root_size; // размер корневого каталога
__u32 data_start; // начало области данных
__u16 byte_per_cluster; // размер кластера в байтах
__u16 next_cluster; // очередной кластер в цепочке
__u8 *dir_entry = NULL; // указатель на записи каталога
int hard; // дескриптор файла устройства
int fat;
Начнём рассмотрение с главной функции:
int main()
{
int num;
Задаем полное имя файла, содержимое которого мы хотим прочитать. Напомню, что мы работаем только с короткими именами файлов. Порядок работы с длинными именами в данной статье не рассматривается.
__u8 *full_path = "/Folder1/Folder2/text.txt";
Открываем файл устройства:
hard = open(FAT16_PART_NAME, O_RDONLY);
if(hard < 0) {
perror(FAT16_PART_NAME);
exit(-1);
}
Считываем первые 10 кластеров файла. Считывание выполняет функция fat16_read_file(). Параметры функции – полное имя файла и число кластеров для чтения. Функция возвращает число прочитанных кластеров или -1, если при чтении произошла ошибка:
num = fat16_read_file(full_path, 10);
if(num < 0) perror("fat16_read_file");
else printf("Read %d clusters ", num);
Закрываем файл устройства и выходим:
close(hard);
return 0;
}
Функция чтения кластеров файла имеет следующий вид:
int fat16_read_file(__u8 *full_path, int num)
{
struct split_name sn; // структура для хранения составных частей файла
__u8 tmp_name_buff[SHORT_NAME]; // буфер для временного хранения составных элементов полного пути файла
static int i = 1;
int n;