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

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

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

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

IT-новости

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

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

подробнее

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

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

подробнее

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

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

подробнее

    a = __swab16(a);

    memcpy((void *)(buff + i), (void *)&a, 2);

}

В принципе этого можно и не делать, но тогда нам придется самостоятельно формировать RIFF-заголовок, чтобы получить файл в формате WAV. Лучше возложим эту почётную обязанность на sox. Конвертируем файл в WAV-формат:

# sox track.cdr track.wav

Полученный WAV-файл кодируем в формат Ogg Vorbis:

# oggenc track.wav -b 256 track.ogg

Системный вызов IOCTL

Теперь рассмотрим порядок посылки устройству пакетной команды при помощи системного вызова ioctl. Команда выглядит следующим образом:

ioctl(int fd, CDROM_SEND_PACKET, struct cdrom_generic_command *);

Первый параметр – дескриптор файла устройства. Второй параметр, CDROM_SEND_PACKET – спецификатор, указывающий на необходимость передачи устройству пакетной команды. Третий параметр – структура следующего типа:

/* for CDROM_PACKET_COMMAND ioctl */

struct cdrom_generic_command

{

    unsigned char                     cmd[CDROM_PACKET_SIZE];

    unsigned char                     *buffer;

    unsigned int               buflen;

    int                        stat;

    struct request_sense              *sense;

    unsigned char              data_direction;

    int                        quiet;

    int                        timeout;

    void                       *reserved[1];

};

 

Эта структура определена в файле <linux/cdrom.h>. Назначение полей структуры:

n  cmd[CDROM_PACKET_SIZE] – 12-байтный командный пакет;

n  buffer – указатель на буфер, куда будут помещены считанные данные. Также в этом буфере хранятся данные, которые будут переданы устройству;

n  buflen – размер передаваемых (принимаемых) данных;

n  sense – структура, содержащая информацию о состоянии устройства (см. команду REQUEST SENSE и рис. 10). Эта структура также определена в файле <linux/cdrom.h>;

n  data_direction – направление обмена данными. Может принимать следующие значения:

 

#define CGC_DATA_WRITE 1 // передача данных устройству

#define CGC_DATA_READ 2 // приём данных от устройства

#define CGC_DATA_NONE 3 // нет обмена данными

 

n  timeout – допустимое время выполнения команды.

Рассмотрим примеры программ, выполняющих доступ к ATAPI-устройству при помощи системного вызова IOCTL.

Первый пример – открытие и закрытие лотка CD-ROM (файл IOCTL/open_close.c).

/* Файл open_close.c */

#include <stdio.h>

#include <fcntl.h>

#include <linux/types.h>

#include <linux/cdrom.h>

 

int main()

{

    int fd;

    struct cdrom_generic_command cgc;

 

/* Открываем файл устройства */

    fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);

    memset((void *)&cgc, 0, sizeof(struct cdrom_generic_command));

 

/* Ждём готовность устройства к выполнению пакетной команды. Поле data_direction будет содержать CGC_DATA_NONE,

 * т.к. команда не требует передачи данных

 */

    cgc.cmd[0] = GPCMD_TEST_UNIT_READY; // см. <linux/cdrom.h>

    cgc.data_direction = CGC_DATA_NONE;

 

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


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