Роб Кёртен - Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
- Название:Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
- Автор:
- Жанр:
- Издательство:Петрополис
- Год:2001
- Город:Санкт-Петербург
- ISBN:5-94656-025-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Роб Кёртен - Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform краткое содержание
Книга "Введение в QNX/Neutrino 2» откроет перед вами в мельчайших подробностях все секреты ОСРВ нового поколения от компании QNX Software Systems Ltd (QSSL) — QNX/Neutrino 2. Книга написана в непринужденной манере, легким для чтения и понимания стилем, и поможет любому, от начинающих программистов до опытных системотехников, получить необходимые начальные знания для проектирования надежных систем реального времени, от встраиваемых управляющих приложений до распределенных сетевых вычислительных систем
В книге подробно описаны основные составляющие ОС QNX/Neutrino и их взаимосвязи. В частности, уделено особое внимание следующим темам:
• обмен сообщениями: принципы функционирования и основы применения;
• процессы и потоки: базовые концепции, предостережения и рекомендации;
• таймеры: организация периодических событий в программах;
• администраторы ресурсов: все, что относится к программированию драйверов устройств;
• прерывания: рекомендации по эффективной обработке.
В книге представлено множество проверенных примеров кода, подробных разъяснений и рисунков, которые помогут вам детально вникнуть в и излагаемый материал. Примеры кода и обновления к ним также можно найти на веб-сайте автора данной книги, www.parse.com.
Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Клиентская функция: open() , fopen() , sopen() и др.
Сообщения: _IO_CONNECT, подтипы _IO_CONNECT_COMBINE, _IO_CONNECT_COMBINE_CLOSE и _IO_CONNECT_OPEN.
Структура данных:
struct _io_connect {
// Внутренние поля (как описано выше)
uint16_t path_len ;
uint8_t extra_type ;
uint16_t extra_len ;
char path [1];
};
struct _io_connect_link_reply {
uint32_t reserved1 [2];
uint8_t eflag ;
uint8_t reserved2 [3];
uint32_t umask ;
uint16_t nentries ;
uint16_t path_len ;
};
typedef union {
struct _io_connect connect ;
struct _io_connect_link_reply link_reply ;
} io_open_t;
Описание: Это основная точка входа в администратор ресурсов. Она выполняет проверку, действительно ли клиент имеет соответствующие права на открытие файла, привязывает OCB к внутренним структурам библиотеки (посредством функций resmgr_bind_ocb() или iofunc_ocb_attach() ) и возвращает errno . Отметим, что для данной функции релевантны не все поля структур ввода и вывода.
Возвращает: Код завершения, при помощи вспомогательного макроса _IO_SET_CONNECT_RET .
int io_openfd(resmgx_context_t * ctp , io_openfd_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_openfd_default()
Вспомогательные функции: iofunc_openfd()
Клиентская функция: openfd()
Сообщения: _IO_OPENFD
Структура данных:
struct _io_openfd {
uint16_t type ;
uint16_t combine_len ;
uint32_t ioflag ;
uint16_t sflag ;
uint16_t reserved1 ;
struct _msg_info info ;
uint32_t reserved2 ;
uint32_t key ;
};
typedef union {
struct _io_openfd i ;
} io_openfd_t;
Описание: Данная функция аналогична предоставляемому обработчику io_open() — за исключением того, что вместо имени пути передается дескриптор уже открытого файла (в силу передачи вам параметра ocb в вызове функции).
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS .
int io_pathconf(resmgr_context_t * ctp , io_pathconf_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_pathconf_default()
Вспомогательные функции: iofunc_pathconf()
Клиентская функция: fpathconf() , pathconf()
Сообщения: IO_PATHCONF
Структура данных:
struct _io_pathconf {
uint16_t type ;
uint16_t combine_len ;
short name ;
uint16_t zero ;
};
typedef union {
struct _io_pathconf i ;
] io_pathconf_t;
Описание: Обработчик этого сообщения отвечает за возврат значения настраиваемого параметра name для ресурса, связанного с данным OCB. Используйте функцию по умолчанию и расширьте ее дополнительными вариантами элемента name , соответствующими вашему устройству.
Возвращает: Код завершения, при помощи вспомогательного макроса _IO_SET_PATHCONF_VALUE ; флаги возвращаются в ответном сообщении.
int io_read(resmgr_context_t * ctp , io_read_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_read_default()
Вспомогательные функции: iofunc_read() , iofunc_read_verify()
Клиентская функция: read() , readdir()
Сообщение: IO_READ
Структура данных:
struct _io_read {
uint16_t type ;
uint16_t combine_len ;
int32_t nbytes ;
uint32_t xtype ;
};
typedef union {
struct _io_read i ;
} io_read_t;
Описание: Отвечает за чтение данных из ресурса. Клиент задает число байт, которое он готов прочитать, в элементе nbytes . Вы возвращаете данные, увеличиваете смещение в OCB и обновляете соответствующие поля с информацией о временах доступа.
Отметим, что элемент xtype может устанавливать для отдельных сообщений флаг переопределения, поэтому его надо проверять. Если вы не поддерживаете никаких расширенных флагов переопределения, вы должны возвратить EINVAL. Далее, в примерах функций io_read() и io_write() , мы рассмотрим обработку одного очень важного (и очень непростого!) флага переопределения, называемого _IO_XTYPE_OFFSET.
Отметим также, что сообщение _IO_READ приходит не только для обычных файлов, но также и для чтения содержимого каталогов. В варианте с каталогом вы должны гарантированно обеспечить возврат целого (integral) числа элементов struct dirent
. За дополнительной информацией по возврату элементов каталога см. пример в параграфе «Возврат элементов каталога» раздела «Дополнительно».
Чтобы удостовериться, что файл был открыт в режиме, совместимом с операцией чтения, надо вызвать вспомогательную функцию iofunc_read_verify() . Также, следует вызвать функцию iofunc_sync_verify() , чтобы проверить, надо ли синхронизировать данные с носителем.
Возвращает: Число считанных байтов или код завершения, при помощи вспомогательного макроса _IO_SET_READ_NBYTES , а также собственно данные — ответным сообщением.
В качестве примера с возвратом только данных см. ниже раздел «Простой пример функции io_read() ». Более сложный пример с одновременным возвратом как данных, так и элементов каталогов, см. в параграфе «Возврат элементов каталога» раздела «Дополнительно».
int io_readlink(resmgr_context_t * ctp , io_readlink_t * msg ,
RESMGR_HANDLE_T * handle , void* reserved )
Классификация: Функция установления соединения
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_readlink()
Клиентская функция: readlink()
Сообщения: IO_CONNECT, подтип IO_CONNECT_READLINK
Структура данных:
struct _io_connect {
// Внутренние поля (как описано выше)
uint16_t path_len ;
uint8_t extra_type ;
uint16_t extra_len ;
char path [1];
};
struct _io_connect_link_reply {
uint32_t reserved1 [2];
uint8_t eflag ;
uint8_t reserved2 [3];
uint32_t umask ;
uint16_t nentries ;
uint16_t path_len ;
};
typedef union {
struct _io_connect connect ;
struct _io_connect_link_reply link_reply ;
} io_open_t;
Описание: Отвечает за чтение содержимого символьной связи (линка), как определено полем path входной структуры. Возвращаемые байты представляют собой содержимое символьной связи; возвращаемый код состояния представляет собой число байт в ответе. Допустимый возврат должен быть сделано только для символьной связи. Все другие доступы должны возвратить код ошибки.
Читать дальшеИнтервал:
Закладка: