Отметьте, что чтобы удостовериться, что файл был открыт в режиме, совместимом с записью, следует вызвать вспомогательную функцию iofunc_write_verify. Также следует вызывать функцию iofunc_sync_verify для проверки необходимости синхронизации данных с носителем.
Возвращает: Код завершения, при помощи вспомогательного макроса _IO_SET_WRITE_NBYTES.
Пример см. ниже в параграфе «Простой пример функции io_write».
Примеры
Этот
раздел — своего рода «кулинарная книга» для программистов. Здесь я приведу ряд готовых примеров, которые вы сможете непосредственно использовать в качестве базиса для ваших проектов. Это не совсем готовые администраторы ресурсов — вы должны будете дополнить их функциями работы с пулами потоков и «каркасом» диспетчеризации (о котором речь ниже), а также удостовериться, что ваши версии функций- обработчиков помещаются в соответствующие таблицы функций после вызова iofunc_func_init, чтобы корректно переопределить значения по умолчанию!
Я начну с ряда простых примеров, демонстрирующих базовые функциональные возможности обработчиков различных сообщений, таких как:
• io_read
• io_write
• io_devctl (без передачи данных)
• io_devctl (с передачей данных)
Затем, в разделе «Дополнительно», мы рассмотрим обработчик io_read, который обеспечивает возврат элементов каталога.
Базовый каркас администратора ресурсов
Приведенный ниже пример можно использовать в качестве шаблона для многопоточного администратора ресурсов. (Шаблон однопоточного администратора ресурсов мы уже рассматривали — это было в разделе «Библиотека администратора ресурсов», когда мы обсуждали администратор
Дополнительную информацию об интерфейсе диспетчеризации (т.е., о функции dispatch_create), см. в справочном руководстве по Си-библиотеке (С Library Reference).