Роб Кёртен - Введение в 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS , и данные в ответном сообщении.
int io_rename(resmgr_context_t * ctp , io_rename_t * msg ,
RESMGR_HANDLE_T * handle , io_rename_extra_t* extra )
Классификация: Функция установления соединения
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_rename()
Клиентская функция: rename()
Сообщение: _IO_CONNECT, подтип _IO_CONNECT_RENAME
Структура данных:
struct _io_connect {
// internal fields (as described above)
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 _io_rename_extra {
char path [1];
} io_rename_extra_t;
typedef union {
struct _io_connect connect ;
struct _io_connect_link_reply link_reply ;
} io_rename_t;
Описание: Выполняет операцию переименования, получив на вход первоначальное имя в элементе path и новое имя в поле path переданного параметра extra . Замечание по реализации: для первоначального имени задается имя пути (а не OCB) — это делается специально для случая переименования файла, который является жесткой связью к другому файлу. Если бы был задан OCB, две (или более) жестких связей к одному и тому же файлу различить было бы нельзя.
Данная функция будет вызываться только для тех двух имен файлов, которые принадлежат одной и той же файловой системе (то есть одному и тому же устройству). Поэтому в проверке случаев, в которых надо было бы возвращать EXDEV, нет никакой необходимости. Это ничуть не мешает вам возвращать EXDEV — например, если вы не хотите выполнять rename() самостоятельно (например, операция переименования из одного каталога в другой может оказаться очень сложной). В случае возврата EXDEV командно-строковая утилита mv
выполнит сначала cp
, а потом rm
(библиотечная функция rename() этого не сделает — она просто установит errno в EXDEV).
Также перед вызовом этой функции должны быть разрешены все символьные связи (где это применимо), а переданные имена путей должны быть абсолютны и относиться к файловой системе, за которую отвечает данный администратор ресурсов.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS .
int io_shutdown(resmgr_context_t * ctp , io_shutdown_t * msg ,
RESMGR_OCB_T * ocb )
Данная функция зарезервирована QSSL для будущего использования. Вам следует инициализировать таблицу функций ввода/вывода, используя iofunc_func_init() , и не изменять данную точку входа.
int io_space(resmgr_context_t * ctp , io_space_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: Нет
Вспомогательные функции: iofunc_space_verify()
Клиентская функция: chsize() , fcntl() , ftruncate() , ltrunc()
Сообщение _IO_SPACE
Структура данных:
struct _io_space {
uint16_t type ;
uint16_t combine_len ;
uint16_t subtype ;
short whence ;
uint64_t start ;
uint64_t len ;
};
typedef union {
struct _io_space i ;
uint64_t o ;
} io_space_t;
Описание: Эта функция применяется для выделения или освобождения занимаемого ресурсом пространства. Параметр subtype («подтип») указывает на то, следует ли это пространство выделить (если равен F_ALLOCSP) или освободить (если равен F_FREESP). Комбинация параметров whence («откуда») и start («начало») указывает, где следует начать выделение/ освобождение; элемент len указывает размер операции.
Возвращает: Число байтов (размер ресурса), посредством вспомогательного макроса _RESMGR_STATUS .
int io_stat(resmgr_context_t * ctp , io_stat_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_stat_default()
Вспомогательные функции: iofunc_stat()
Клиентская функция: stat() , lstat() , fstat()
Сообщения: _IO_STAT
Структура данных:
struct _io_stat {
uint16_t type ;
uint16_t combine_len ;
uint32_t zero ;
};
typedef union (
struct _io_stat i ;
struct stat o ;
} io_stat_t;
Описание: Обрабатывает сообщение, запрашивающее информацию о ресурсе, связанном с переданным OCB. Заметьте, что атрибутная запись содержит всю информацию, необходимую для выполнения запроса stat() . Вспомогательная функция iofunc_stat() заполняет структуру struct stat
, базированную на атрибутной записи. Эта вспомогательная функция также изменяет сохраненные элементы dev / rdev так, чтобы они были уникальны с точки зрения единичного узла (это используется для выполнения вызовов stat() в отношении файлов по сети). Писать этот обработчик самостоятельно особого смысла нет.
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS , и структуру struct stat
— в ответном сообщении.
int io_sync(resmgr_context_t * ctp , io_sync_t * msg ,
RESMGR_OCB_T * ocb )
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_sync_default()
Вспомогательные функции: iofunc_sync_verify() , iofunc_sync()
Клиентская функция: fsync() , fdatasync()
Сообщения: _IO_SYNC
Структура данных:
struct _io_sync {
uint16_t type ;
uint16_t сombine_len ;
uint32_t flag ;
};
typedef union {
struct _io_sync i ;
} io_sync_t;
Описание: Это точка входа команды flush (синхронизация носителя информации с буферами — например, диска с дисковым кэшем — прим. ред .). Вспомогательная функция iofunc_sync() принимает поле flag входного сообщения и возвращает одно из следующих значений, которые указывают, какие действия ваш администратор ресурсов должен выполнить:
• 0 — не делать ничего;
• O_SYNC — все, что связано с файлом (включая содержимое файла, элементы каталогов, индексные дескрипторы (inodes), и т.д.) должно присутствовать на носителе и должно быть восстанавливаемым с него.
• O_DSYNC — присутствовать на носителе и быть восстанавливаемыми с него должны только данные файла.
Читать дальшеИнтервал:
Закладка: