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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

    __u8 *tmp_buff;

    __u16 start_cluster, next_cluster;

Параметры функции мы перечислили при рассмотрении функции main.

Подготовительные операции – обнуляем буфер tmp_name_buff и структуру struct split_name sn:

    memset(tmp_name_buff, 0, SHORT_NAME);

    memset((void *)&sn, 0, sizeof(struct split_name));

Первым символом в абсолютном путевом имени файла должен быть прямой слэш (/). Проверяем это:

    if(full_path[0] != '/') return -1;

Считываем с раздела загрузочный сектор:

    if(read_fbs() < 0) return -1;

Считанный загрузочный сектор находится сейчас в глобальной структуре struct fat_boot_sector fbs. Скопируем из этой структуры размер сектора, число записей в корневом каталоге и общее число секторов на разделе:

    memcpy((void *)&sector_size, (void *)fbs.sector_size, 2);

    memcpy((void *)&dir_entries, (void *)fbs.dir_entries, 2);

    memcpy((void *)&sectors, (void *)fbs.sectors, 2);

Определим размер кластера в байтах:

    byte_per_cluster = fbs.cluster_size * 512

Отобразим информацию, находящуюся в загрузочном секторе:

    printf("System id - %s ", fbs.system_id);

    printf("Sector size - %d ", sector_size);

    printf("Cluster size - %d ", fbs.cluster_size);

    printf("Reserved - %d ", fbs.reserved);

    printf("FATs number - %d ",fbs.fats);

    printf("Dir entries - %d ", dir_entries);

    printf("Sectors - %d ", sectors);

    printf("Media - 0x%X ", fbs.media);

    printf("FAT16 length - %u ", fbs.fat_length);

    printf("Total sect - %u ", fbs.total_sect);

    printf("Byte per cluster - %d ", byte_per_cluster);

Вычисляем размер FAT16 в байтах и считываем её:

    fat16_size = fbs.fat_length * 512;

    if(read_fat16() < 0) return -1;

Считываем корневой каталог:

    if(read_root_dentry() < 0) return -1;

Сейчас указатель dir_entry позиционирован на область памяти, содержащую записи корневого каталога. Размер этой области памяти равен размеру корневого каталога (root_size).

Сохраним (для контроля) содержимое корневого каталога в отдельном файле:

#ifdef DEBUG

    fat = open("dir16", O_CREAT|O_WRONLY, 0600);

    write(fat, dir_entry, root_size);

    close(fat);

#endif

Вычисляем начало области данных:

    data_start = 512 * fbs.reserved + fat16_size * fbs.fats + root_size;

Имея все записи корневого каталога, мы можем добраться до содержимого файла test.txt. С этой целью организуем цикл. В теле цикла проведем разбор полного имени файла, выделяя его элементы – подкаталоги (их у нас два, Folder1 и Folder2) и имя искомого файла (test.txt).

    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] == '')) {


Предыдущая страницаОглавлениеСледующая страница
 
[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