Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform
Шрифт:
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_openfd_default
Вспомогательные функции: iofunc_openfd
Клиентская функция: openfd
Сообщения: _IO_OPENFD
Структура
Описание: Данная функция аналогична предоставляемому обработчику io_open — за исключением того, что вместо имени пути передается дескриптор уже открытого файла (в силу передачи вам параметра ocb в вызове функции).
Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS.
Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_pathconf_default
Вспомогательные функции: iofunc_pathconf
Клиентская функция: fpathconf, pathconf
Сообщения: IO_PATHCONF
Структура данных:
Описание: Обработчик этого сообщения отвечает за возврат значения настраиваемого параметра name для ресурса, связанного с данным OCB. Используйте функцию по умолчанию и расширьте ее дополнительными вариантами элемента name, соответствующими вашему устройству.
Возвращает:
Код завершения, при помощи вспомогательного макроса _IO_SET_PATHCONF_VALUE; флаги возвращаются в ответном сообщении.Классификация: Функция ввода/вывода
Обработчик по умолчанию: iofunc_read_default
Вспомогательные функции: iofunc_read, iofunc_read_verify
Клиентская функция: read, readdir
Сообщение: IO_READ
Структура данных:
Описание: Отвечает за чтение данных из ресурса. Клиент задает число байт, которое он готов прочитать, в элементе nbytes. Вы возвращаете данные, увеличиваете смещение в OCB и обновляете соответствующие поля с информацией о временах доступа.
Отметим, что элемент xtype может устанавливать для отдельных сообщений флаг переопределения, поэтому его надо проверять. Если вы не поддерживаете никаких расширенных флагов переопределения, вы должны возвратить EINVAL. Далее, в примерах функций io_read и io_write, мы рассмотрим обработку одного очень важного (и очень непростого!) флага переопределения, называемого _IO_XTYPE_OFFSET.
Отметим также, что сообщение _IO_READ приходит не только для обычных файлов, но также и для чтения содержимого каталогов. В варианте с каталогом вы должны гарантированно обеспечить возврат целого (integral) числа элементов
Чтобы удостовериться, что файл был открыт в режиме, совместимом с операцией чтения, надо вызвать вспомогательную функцию iofunc_read_verify. Также, следует вызвать функцию iofunc_sync_verify, чтобы проверить, надо ли синхронизировать данные с носителем.
Возвращает: Число считанных байтов или код завершения, при помощи вспомогательного макроса _IO_SET_READ_NBYTES, а также собственно данные — ответным сообщением.
В качестве примера с возвратом только данных см. ниже раздел «Простой пример функции io_read». Более сложный пример с одновременным возвратом как данных, так и элементов каталогов, см. в параграфе «Возврат элементов каталога» раздела «Дополнительно».