Книга: UNIX: взаимодействие процессов
15.6. Функция door_info
15.6. Функция door_info
Только что описанная функция door_cred предоставляет серверу информацию о клиенте. Клиент же может получить информацию о сервере, вызвав doo_info:
#include <door.h>
int door_info(int fd, door_info_t *info);
/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */
Дескриптор fd указывает на открытую дверь. Структура типа door_info_t, на которую указывает info, после возвращения из функции содержит информацию о сервере:
typedef struct doo_info {
pid_t di_target; /* идентификатор процесса сервера */
door_ptr_t di_proc; /* процедура сервера */
door_ptr_t di_data; /* принимаемые процедурой сервера данные */
door_attr_t di_attributes; /* атрибуты, связанные с данной дверью */
door_id_t di_uniquifier; /* уникальный номер двери */
} door info t;
Поле di_target содержит идентификатор процесса сервера, a di_proc — адрес процедуры сервера в процессе (от которого клиенту, вообще говоря, пользы мало). Указатель, передаваемый процедуре сервера в качестве первого аргумента (cookie), возвращается клиенту в поле di_data.
Текущие атрибуты двери помещаются в поле di_attributes, и два из них уже были описаны в разделе 15.3. Это атрибуты DOOR_PRIVATE и DOOR_UNREF. Два других атрибута называются DOOR_LOCAL (процедура является локальной для данного процесса) и DOOR_REVOKE (сервер аннулировал процедуру, связанную с этой дверью, вызвав door_revoke).
Каждой двери при создании сопоставляется уникальный в пределах системы номер, который возвращается в поле di_uniquifier.
Эта функция обычно вызывается клиентом для получения информации о сервере. Однако она может быть вызвана и из процедуры сервера, причем первым аргументом в этом случае должна быть константа DOOR_QUERY. Тогда функция возвратит информацию о вызвавшем потоке, то есть о данном экземпляре процедуры сервера. В этом случае адреса процедуры сервера и принимаемых аргументов (di_proc и di_data) могут представлять интерес.
- 15.1. Введение
- 15.2. Функция door_call
- 15.3. Функция door_create
- 15.4. Функция door_return
- 15.5. Функция door_cred
- 15.6. Функция door_info
- 15.7. Примеры
- 15.8. Передача дескрипторов
- Пример
- 15.9. Функция door server_create
- 15.10. Функции door_bind, door unbind и door_revoke
- 15.11. Досрочное завершение клиента или сервера
- 15.12. Резюме
- Упражнения
- 15.9. Функция door server_create
- Функция door_info
- 15.5. Функция door_cred
- Функция door_cred и информация о клиенте
- 15.4. Функция door_return
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Information request
- Функция strcmp( )
- Управление функциями узла
- 6.6.4 sigwait and sigwaitinfo