Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) {
perror("ioctl");
printf("Sense key - 0x%02x ", sense.sense_key);
printf("ASC - 0x%02x ", sense.asc);
printf("ASCQ - 0x%02x ", sense.ascq);
return -1;
}
/* Определяем размер данных TOC */
memcpy(&toc_data_length, data_buff, 2);
toc_data_length = __swab16(toc_data_length);
printf("TOC data length - %d ", toc_data_length);
/* Вычисляем число записей в содержимом TOC (cм. рис.13) */
toc_entries = (toc_data_length - 2)/11;
printf("TOC entries - %d ", toc_entries);
/* Номер первой и последней сессии */
printf("First: %d ", data_buff[2]);
printf("Last: %d ", data_buff[3]);
/* Выделяем память для данных TOC, размер этих данных уже точно известен */
t = (struct toc *)malloc(toc_data_length);
memset((void *)t, 0, toc_data_length);
/* Копируем данные TOC из буфера data_buff и освобождаем выделенную под него память */
memcpy((void *)t, data_buff + 4, toc_data_length);
free(data_buff);
/* Отображаем результаты чтения TOC */
printf("Entry Session Point Min Sec Frame PMin Psec PFrame LBA ");
for(i = 0; i < toc_entries; i++) {
printf("%d ", i);
printf("%d ", (t + i)->snum);
printf("%X ", (t + i)->point);
printf("%d ", (t + i)->min);
printf("%d ", (t + i)->sec);
printf("%d ", (t + i)->frame);
printf("%d ", (t + i)->pmin);
printf("%d ", (t + i)->psec);
printf("%d ", (t + i)->pframe);
/* Пересчитываем координаты из MSF в LBA при помощи макроса MSF2LBA */
#define MSF2LBA(Min, Sec, Frame) (((Min * 60 + Sec) * 75 + Frame) - 150)
lba = MSF2LBA((t + i)->pmin, (t + i)->psec, ї
(t + i)->pframe);
printf("%u ", lba);
}
free(t);
return 0;
}
Полный листинг программы чтения TOC находится в файле IOCTL/read_toc_full.c.
Устанавливаем в устройство компакт-диск, на котором создано 2 сессии, и запускаем на выполнение программу read_cd_full. Вывод направим в файл toc:
# ./read_cd_full > toc
В результате в файле toc будут собраны данные Q-субканалов всех Lead-In областей компакт-диска:
TOC data length - 123
TOC entries - 11
First: 1 Last: 2