Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
__u8 start_part[3];
__u8 type_part;
__u8 end_part[3];
__u32 sect_before;
__u32 sect_total;
} pt_t[MAX_PART];
int hard; // дескриптор файла устройства
__u8 mbr[512]; // сюда считаем MBR
Номер раздела, на котором создана файловая система FAT32:
#define FAT32_PART_NUM 5
Структуры загрузочного сектора, сектора FSInfo и элемента каталога (определены в файле <linux/msdos>):
struct fat_boot_sector fbs;
struct fat_boot_fsinfo fsinfo;
struct msdos_dir_entry dentry;
__u32 *fat32 = NULL; // сюда копируем таблицу FAT32
__u16 sector_size; // размер сектора (из FAT32)
__u16 dir_entries; // 0 для FAT32
__u16 sectors; // число секторов на разделе
__u32 fat32_size; // размер FAT32
__u32 data_start; // начало области данных
__u16 byte_per_cluster; // сколько байт в кластере (размер кластера в байтах)
__u32 next_cluster; // очередной кластер в цепочке
__u32 root_cluster; // ROOT cluster - начальный кластер корневого каталога
__u8 *dir_entry = NULL; // указатель на записи каталога
__u64 start_seek = 0; // стартовое смещение к разделу (в байтах)
Главная функция:
int main()
{
int num = 0;
int cluster_num = 5; // сколько кластеров считывать из файла
__u8 *full_path = "/Folder1/Folder2/readme"; // файл для считывания
Открываем устройство, получаем информацию о таблице разделов на устройстве и отображаем информацию о разделах:
hard = open(DEV_NAME, O_RDONLY);
if(hard < 0) {
perror(DEV_NAME);
exit(-1);
}
if(get_pt_info(hard) < 0) {
perror("get_pt_info");
exit(-1);
}
show_pt_info();
Вычисляем стартовое смещение к разделу:
start_seek = (__u64)(pt_t[FAT32_PART_NUM - 1].sect_before) * 512;