LINUX.ORG.RU

Как писать CD? ioctl?


0

0

По какому принципу происходит запись CD? Я пробовал так:


/***************************************************************/
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/sendfile.h>
int main(int argc, char argv[])
{
struct stat stat_buf;
off_t offset = 0;
char* cddrive = "/dev/cdrom"; /*это у меня устройство ЦэДыРома*/
int cd_fd = open (cddrive, O_RDWR);
int fd = open (argv [1], O_RDONLY);
fstat (fd, &stat_buf);/* Определяю размер файла*/
sendfile (cd_fd, fd, &offset, stat_buf.st_size);
ioctl (cd_fd, CDROMEJECT);
close (cd_fd);
close (fd);
return 0;
}
/**********************************************************/

И не фига! Записи не происходит :(
Может я не в том направлении копаю?
Надеюсь на Ваш квалифицированный ответ.
P.S.:
Не спрашивайте, зачем мне нужно писать CD, имея cdrecord. 
Мне просто хочется научится это сделать.

Математические рассчёты на кластерах

>char* cddrive = "/dev/cdrom"; /*это у меня устройство ЦэДыРома*/
>int cd_fd = open (cddrive, O_RDWR);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

то есть у кулхацкеров сейчас модно не проверять результаты вызовов
функций ? ;)

sS ★★★★★
()
Ответ на: комментарий от LONGOBARD

strace - это трассировка системных вызовов. а по поводу вопроса про ЦД: посмотри инфу по АПИ SCSI-generic

anonymous
()
Ответ на: комментарий от LONGOBARD

Тестовый код

>Я не кулхацкер, а это не прога, а кусок кода, пытающийся записать инфу на CD. И чего проверять-то, если и так видно, что не пишется?

Это не кусок кода а кусок сам знаешь чего - если тебе неинтересно ПОЧЕМУ не пишется, можешь ошибки не обрабатывать :)

hint: тебя правильно ткнули в SCSI generic - cdrecord ( <2.0) пишет через /dev/sg* устройства

sS ★★★★★
()
Ответ на: Тестовый код от sS

Работа с пишущим приводом CD осуществляется с помощью SCSI-команд, которые в случае IDE-шного ATAPI-привода шлются с помощью эмуляции SCSI. Для записи компактов надо прочесть документы MMC, SPC и SBC, например, с сайта t10.org. Затем надо понять, как слать SCSI-команды приводу в линухе.

anonymous
()

Если хочешь учиться, не читая доков, а тебе уже не раз перечислили то,
что необходимо знать, то тогда учись по чужому коду. Исходники cdrecord
знаешь где взять, или ссылочкой разродиться для тебя?

anonymous
()
Ответ на: комментарий от anonymous

>Работа с пишущим приводом CD осуществляется с помощью SCSI-команд, которые в случае IDE-шного ATAPI-привода шлются с помощью эмуляции SCSI. Для записи компактов надо прочесть документы MMC, SPC и SBC, например, с сайта t10.org. Затем надо понять, как слать SCSI-команды приводу в линухе.

Все, понял. Спасибо за ответы.

LONGOBARD
() автор топика
Ответ на: комментарий от Murr

Я скачал сырцы 1.11, почитал, и там все вроде через SCSI делается.. Где можно этот "достаточно свежий cdrecord" скачать?

LONGOBARD
() автор топика
Ответ на: комментарий от Murr

Чушь. Расширения, с помощью которых реализуется функциональность CD-писалок - выполнены в виде SCSI-команд, которые в случае IDE-устройств шлются в спец. режиме - пакетном (ATAPI = ATA packet interface). Работа с писалками (да и с читалками тоже так можно делать) вся через SCSI-команды. В линухе работа с ATAPI-устройствами осуществляется с помощью модулей ide-scsi, ide-cd и нескольких чисто SCSI-шных (соответственно, нужна поддержка SCSI-устройств в ядре). Соответствующий привод при этом в /dev отображается не как /dev/hd?, а как натуральный SCSI-шный сидюк. Вполне эмуляция SCSI-устройства, на уровне интерфейса как пользовательского, так и прикладного программирования. Версия cdrecord на механизм работы с ATAPI-устройствами в линухе никак не влияет (автор, кстати, здорово ругается на поддержку ATAPI в линухе).

anonymous
()
Ответ на: комментарий от anonymous

Так что "чушь" то? Или ты это просто написал, чтобы придать вес своей тираде? Или по твоей логике при использовании ide-cd используется "эмуляция SCSI"? Ню-ню ...

Murr ★★
()
Ответ на: комментарий от Murr

Для того, чтобы работать с писалками НУЖЕН модуль ide-scsi, в /dev привод CD-R отображается как SCSI-привод, а работа идет через sg-устройство (через него шлются SCSI-команды).

anonymous
()

Вопрос к разработчикам..

Вопрос немного не по теме, но тем не менее... Нужно писать на CD под Windows возможно здесь кто-нибудь разбирался с данным вопросом?? Сколько может стоить разработка соответствующей компоненты под Delphi? Если кому-то есть что сказать, просьба писать на al@proton-sss.ru

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.