Правильным решением для этой проблемы является сохранение идентификатора отправителя полученного сообщения в какой-нибудь очереди и возврат из вашего обработчика константы _RESMGR._NOREPLY. Это укажет библиотеке администратора ресурсов, что обработка сообщения закончена, но клиента пока разблокировать не надо.
Несколько позже, по готовности данных, вы сможете выбрать идентификатор отправителя нужного клиента и сконструировать ответное сообщение с данными. После этого можно отвечать клиенту.
Вы могли бы также расширить эту концепцию добавлением тайм-аутов, как мы это делали в главе «Часы, таймеры и периодические уведомления» (параграф «Поддерживаемые сервером тайм-ауты»). Если говорить вкратце, там по истечении некоторого интервала времени клиентский запрос считался «просроченным», и сервер отвечал по сохраненному по идентификатору отправителя неким сообщением об ошибке.
Возврат элементов каталога
В приведенном ранее примере функции
Прежде всего давайте посмотрим,
Если вы дискретно объявляете элементы в пространстве имени путей, и эти элементы
Вообще говоря, возврат элементов каталога — это почти то же самое, что и возврат «сырых» данных, за исключением того, что:
• вы должны возвратить
struct dirent
;• эти структуры struct dirent
Первый пункт означает, что вы не можете возвратить, например, семь с половиной структур struct dirent
Второй пункт достаточно очевиден. Он упомянут здесь только потому, что заполнение структуры struct dirent
struct dirent
Давайте взглянем на структуру struct dirent
struct dirent
существует ряд интересных взаимоотношений.Чтобы работать с каталогами, клиент использует функции
Обратите внимание на сходство с «нормальными» функций для файлов (и совпадение применяемых типов сообщений):
Функция для работы с каталогами | Функция для работы с файлами | Сообщение |
---|---|---|
IO_CLOSE_DUP | ||
_IO_CONNECT | ||
_IO_READ | ||
_IO_LSEEK | ||
_IO_LSEEK | ||
_IO_LSEEK |
Если мы на мгновение вообразим, что функции
Сообщение _IO_LSEEK и соответствующая ему функция применяются для «поиска» (или «перемещения») в пределах файла. С каталогом происходит та же история. Вы можете переместиться к «первому» элементу каталога (как явно задав смещение функции
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT