Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

 

           if(next_cluster == EOF_FAT16) {

 

#ifdef DEBUG

               printf("last cluster. ");

#endif

 

               free(tmp_buff);

               close(n);

               return ++i;

           }

 

           start_cluster = next_cluster;

        }

 

#ifdef DEBUG

        printf("stop reading ");

#endif

        return i;

    }

   }

}

Чтение загрузочного сектора FAT16 выполняет функция read_fbs(). Результат помещается в глобальную структуру fbs:

int read_fbs()

{

    if(read(hard,(__u8 *)&fbs, sizeof(fbs)) < 0) return -1;

    return 0;

}

Чтение таблицы размещения файлов файловой системы FAT16 выполняет функция read_fat16():

int read_fat16()

{

    __u64 seek = (__u64)(fbs.reserved) * 512;      // смещение к FAT16 от начала раздела

    fat16 = (void *)malloc(fat16_size);

 

    if(pread64(hard, (__u8 *)fat16, fat16_size, seek) < 0) return -1;

    return 0;

}

Чтение корневого каталога выполняет функция read_root_dentry():

int read_root_dentry()

{

    __u64 seek = (__u64)fbs.reserved * 512 + fat16_size * fbs.fats; // смещение к корневому каталогу от начала раздела

 

    root_size = 32 * dir_entries;     // вычисляем размер корневого каталога

 

    dir_entry = (__u8 *)malloc(root_size);

    if(!dir_entry) return -1;

 

    memset(dir_entry, 0, root_size);

 

    if(pread64(hard, dir_entry, root_size, seek) < 0) return -1;

    return 0;

}

Чтение кластера, принадлежащего файлу, выполняет функция read_cluster(). Входные параметры функции – номер кластера cluster_num и указатель на буфер __u8 *tmp_buff, куда нужно поместить результат чтения. Смещение к кластеру на разделе вычисляется по формуле (см. [1]):

       SEEK = DATA_START + (CLUSTER_NUM - 2) * BYTE_PER_CLUSTER,


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100