Роб Кёртен - Введение в 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
IOFUNC_MOUNT_T * mount ;
uint32_t flags ;
int32_t lock_tid ;
uint16_t lock_count ;
uint16_t count ;
uint16_t rcount ;
uint16_t wcount ;
uint16_t rlocks ;
uint16_t wlocks ;
struct _iofunc_mmap_list * mmap_list ;
struct _iofunc_lock_list * lock_list ;
void * list ;
uint32_t list_size ;
СМ_НИЖЕ!!! nbytes ;
СМ_НИЖЕ!!! inode ;
uid_t uid ;
gid_t gid ;
time_t mtime ;
time_t atime ;
time_t ctime ;
mode_t mode ;
nlink_t nlink ;
dev_t rdev ;
} iofunc_attr_t;
У полей nbytes и inode такой же набор директив условной компиляции, что и у поля offset в OCB (см. параграф «Это странное поле offset»).
Заметьте, что некоторые из полей атрибутной записи полезны только для вспомогательных функций POSIX.
Давайте рассмотрим поля в индивидуальном порядке:
mount | Указатель на необязательную запись точки монтирования (типа iofunc_mount_t ). Он применяется аналогично указателю на атрибутную запись, входящему в состав в OCB, за исключением того, что здесь это поле может принимать NULL — в этом случае для записи точки монтирования применяются установки по умолчанию (см. ниже параграф «Запись точки монтирования iofunc_mount_t »). Как уже было упомянуто, запись точки монтирования привязывается к атрибутной записи «вручную» в инициализационном коде вашего администратора ресурсов. |
flags | Содержит флаги, которые описывают состояние других полей атрибутной записи. Мы вскоре к ним вернемся. |
lock_tid | Для предупреждения проблем синхронизации доступ множества потоков к одной и той же атрибутной записи должен быть взаимно исключающим. Поле lock_tid содержит идентификатор потока (thread ID), которым данная атрибутная запись блокирована в настоящий момент. |
lock_count | Указывает, сколько потоков пытаются использовать данную атрибутную запись. Нулевое значение указывает на то, что структура не заблокирована. Значение, большее нуля (единица или более) указывает на то, что данную структуру используют один или более потоков. |
count | Указывает на число OCB, которые по какой-либо причине открыли эту атрибутную запись. Например, если у одного клиента есть OCB, открытый на чтение, у другого — другой OCB, открытый на чтение/запись, и оба эти OCB указывают на одну и ту же атрибутную запись, то значение count для нее должно быть равно 2. Это будет указывать на то, что данный ресурс открыт двумя клиентами. |
rcount | Число читателей. В примере, приведенном для count , rcount будет также иметь значение 2, потому что ресурс открыт на чтение двумя клиентами. |
wcount | Число писателей. В примере, приведенном для count , wcount будет иметь значение 1, потому что ресурс открыт на чтение только одним клиентом. |
rlocks | Показывает число OCB, наложивших на данный ресурс блокировки по чтению. Если значение этого поля равно нулю, это означает, что никаких блокировок по чтению нет, но могут быть блокировки по записи. |
wlocks | Аналогично rlocks , только для блокировок по записи. |
mmap_list | Для внутреннего использования POSIX-функцией iofunc_mmap_default() . |
lock_list | Для внутреннего использования POSIX-функцией iofunc_lock_default() . |
list | Зарезервировано. |
list_size | Размер области, зарезервированной под поле list. |
nbytes | Размер ресурса в байтах. Например, если ресурс описывает конкретный файл, и этот файл имеет размер 7756 байт, то поле nbytes будет содержать значение 7756. |
inode | Содержит порядковый номер файла или ресурса; он должен быть уникален для каждой точки монтирования. Значение поля inode никогда не должно быть нулевым, потому что нуль указывает на неиспользуемый файл. |
uid | Идентификатор пользователя владельца данного ресурса. |
gid | Идентификатор группы владельца данного ресурса. |
mtime | Время последней модификации файла, обновленное или как минимум ставшее недействительным вследствие обработки клиентской функции write() . |
atime | Время последнего доступа к файлу, обновленное или как минимум ставшее недействительным вследствие обработки клиентской функции read() , возвратившей ненулевое количество прочитанных байт. |
ctime | Время последнего изменения файла, обновленное или как минимум ставшее недействительным вследствие обработки клиентских функций write() , chown() или chmod() . |
mode | Режим доступа к файлу. Содержит стандартные значения S_* из (например, S_IFCHR), или восьмеричные значения (например, 0664), указывающие на режим доступа для владельца объекта (owner), группы (group) и всех остальных (other). |
nlink | Число связей (линков) файла, возвращаемое клиентским вызовом stat() . |
rdev | Для специальных символьных устройств это поле состоит из старшего (major) и младшего (minor) кодов устройства (10 младших бит — младший код, старшие 6 бит — старший). Для устройств другого типа это поле содержит номер устройства (подробности см. ниже в параграфе «О номерах устройств, индексных дескрипторах и нашем друге rdev »). |
Как и в случае с OCB, вы можете расширять «стандартную» атрибутную запись вашими собственными данными — см. раздел «Дополнительно».
iofunc_mount_t
Запись точки монтирования содержит информацию, общую для нескольких атрибутных записей.
Вот содержимое записи точки монтирования (взято из ):
typedef struct _iofunc_mount {
uint32_t flags ;
uint32_t conf ;
dev_t dev ;
int32_t blocksize ;
iofunc_funcs_t * funcs ;
} iofunc_mount_t;
Поле flags содержит только один флаг — IOFUNC_MOUNT_32BIT. Этот флаг указывает на то, что параметр offset в OCB и параметры nbytes и inode в атрибутной записи являются 32-разрядными. Заметьте, что вы можете определять ваши собственные флаги в поле flags , используя биты, определенные константой IOFUNC_MOUNT_FLAGS_PRIVATE.
Поле conf содержит следующие флаги:
IOFUNC_PC_CHOWN_RESTRICTED
Указывает, что файловая система является «chown-ограниченной», то есть никто, кроме суперпользователя (root), не может применять к файлам операцию chown() .
IOFUNC_PC_NO_TRUNC
Указывает на то, что файловая система не выполняет усечение имен.
IOFUNC_PC_SYNC_IO
Указывает на то, что файловая система поддерживает синхронные операции ввода-вывода.
IOFUNC_PC_LINK_DIR
Указывает на то, что допускается создание/уничтожение связей (linking/unilnking) для каталогов.
Поле dev содержит номер устройства и описывается ниже в параграфе «О номерах устройств, индексных дескрипторах и нашем друге rdev ».
Читать дальшеИнтервал:
Закладка: