Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
byte_per_cluster = fbs.cluster_size * 512; // размер кластера в байтах
root_cluster = fbs.root_cluster; // номер кластера корневого каталога
Считываем FAT32:
if(read_fat32() < 0) return -1;
Выделяем память для записей каталога:
dir_entry = (__u8 *)malloc(byte_per_cluster);
if(!dir_entry) return -1;
Считываем корневой каталог:
if(read_directory(root_cluster) < 0) return -1;
Проводим разбор полного пути файла и разделение каждого элемента на составляющие:
while(1) {
memset(tmp_name_buff, 0, SHORT_NAME);
memset((void *)&sn, 0, sizeof(struct split_name));
for(n = 0 ; n < SHORT_NAME; n++, i++) {
tmp_name_buff[n] = full_path[i];
if((tmp_name_buff[n] == '/') || (tmp_name_buff[n] == ' ')) {
i++;
break;
}
}
tmp_name_buff[n] = ' ';
if(split_name(tmp_name_buff, &sn) < 0) {
printf("not valid name ");
return -1;
}
if(get_dentry(&sn) < 0) {
printf("No such file! ");
return -1;
}
Для получения стартового номера кластера в файловой системе FAT32 необходимо задействовать старшее слово номера первого кластера файла – поле starthi структуры dentry:
start_cluster = (((__u32)dentry.starthi << 16) | dentry.start);
Проверяем байт атрибутов:
if(dentry.attr & 0x10) { // это каталог
if(read_directory(start_cluster) < 0) return -1;
continue;
}
if(dentry.attr & 0x20) { // а это - файл