Книга: UNIX: взаимодействие процессов

Функция door_info

Функция door_info

В листинге 15.3 приведен текст программы, открывающей дверь и вызывающей door_infо для получения информации об этой двери, которая затем выводится на экран.

Листинг 15.3. Вывод информации о двери

//doors/doorinfo.c
1  #include "unpipc.h"
2  int
3  main(int argc, char **argv)
4  {
5   int fd;
6   struct stat stat;
7   struct door_info info;
8   if (argc != 2)
9    err_quit("usage; doorinfo <pathname>");
10  fd = Open(argv[1], O_RDONLY);
11  Fstat(fd, &stat);
12  if (S_ISDOOR(stat.st_mode) == 0)
13   err_quit("pathname is not a door");
14  Door_info(fd, &info);
15  printf("server PID = %ld, uniquifier = %ld",
16   (long)info.di_target, (long)info.di_uniquifier);
17  if (info.di_attributes & DOOR_LOCAL)
18   printf(", DOOR_LOCAL");
19  if (info.di_attributes & DOOR_PRIVATE)
20   printf(", DOOR_PRIVATE");
21  if (info.di_attributes & DOOR_REVOKED)
22   printf(", DOOR_REVOKED");
23  if (info.di_attributes & DOOR_UNREF)
24   printf(", DOOR_UNREF");
25  printf("n");
26  exit(0);
27 }

Сначала программа открывает файл с указанным полным именем и проверяет, что это действительно дверь. Поле st_mode структуры stat в этом случае должно содержать такое значение, что макрос S_ISDOOR будет возвращать значение «истина». Затем вызывается функция door_info.

Сначала мы укажем этой программе полное имя файла, не являющегося дверью, а затем попробуем получить информацию о двух встроенных дверях Solaris 2.6:

solaris % doorinfo/etc/passwd
pathname is not a door
solaris % doorinfo /etc/.name_service_door
server PID = 308, uniquifier = 18, DOOR_UNREF
solaris % doorinfo /etc/.syslog_door
server PID = 282, uniquifier = 1635
solaris % ps –f -p 308
root 308 1 0 Apr 01 ? 0:34 /usr/sbin/nscd
solaris % ps –f -p 282
root 282 1 0 Apr 01 ? 0:10 /usr/sbin/syslogd –n –z 14

Команду ps мы используем для того, чтобы узнать, какая программа выполняется с идентификатором, возвращаемым door_info.

Оглавление книги


Генерация: 1.181. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз