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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

    memcpy((void *)t, (data_buff + 4), toc_length);

    free(data_buff);

 

/* Отобразим результаты */

    for(i = 0; i < total_tracks; i++)

           printf("track: %d lba: %u ", (i + 1), __swab32((t + i)->lba));

 

    return 0;

}

Полный листинг программы чтения TOC приведен в файле RAW/read_toc1.c.

Рассмотрим ещё один пример чтения TOC. Для хранения содержимого TOC организуем односвязный список структур следующего вида:

struct toc {

    __u8 res;

    __u8 adr_cntl;

    __u8 trk_num;

    __u8 res1;

    __u32 lba;

    struct toc *next; // указатель на следующий элемент списка

};

Здесь struct toc *next – указатель на следующий элемент списка. Формирование этого списка будет выполнять рекурсивная функция read_toc( ):

struct toc * read_toc()

{

 

#define READ_TOC 0x43

 

    static int i = 1;

    int n;

    __u8 cmd_buff[12];

    __u8 data_buff[12];

 

/* При каждом обращении к диску мы считываем 12 байт – 4 байта заголовка и 8 байт дескриптора трека,

 * номер которого задан в поле Starting Track

 */

    __u16 buff_size = 12, a;

    struct toc *t;

 

/* Если номер трека превысил 0xAA, выполнение функции прекращается */

    if(i > 0xAA) return NULL;

 

/* Выделяем память для дескриптора трека */

    t = (struct toc *)malloc(sizeof(struct toc));

 

/* Формируем пакетную команду */

    memset((void *)cmd_buff, 0, 12);

    cmd_buff[0] = READ_TOC;

 

/* Поле Starting Track содержит номер трека. Этот номер увеличивается при каждом вызове функции */

    cmd_buff[6] = i;

 

/* Размер считываемых данных */

    buff_size = __swab16(buff_size);

    memcpy((void *)(cmd_buff + 7), (void *)&buff_size, 2);

 

/* Посылаем устройству пакетную команду */

    if(send_packet_data_command(buff_size, cmd_buff) < 0) {

           printf("Error read TOC ");

           request_sense();

           exit(-1);


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

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