. Получение и вывод информации о файле и созданного ключа IPC
>//svipc/ftok.c
>1 #include "unpipc.h"
>2 int
>3 main(int argc, char **argv)
>4 {
>5 struct stat stat;
>6 if (argc != 2)
>7 err_quit("usage: ftok ");
>8 Stat(argv[1], &stat);
>9 printf("st_dev: &lx, st_ino: %Ix, key: %x\n",
>10 (u_long) stat.st_dev, (u_long) stat.st_ino,
>11 Ftok(argv[1], 0x57));
>12 exit(0);
>13 }
Выполнение этой программы в системе Solaris 2.6 приведет к следующим результатам:
>solaris %ftok /etc/system
>st_dev: 800018, st_ino: 4a1b, key: 57018a1b
>solaris %ftok /usr/tmp
>st_dev: 800015, st_ino: 10b78, key: 57015b78
>solaris %ftok /home/rstevens/Mail.out
>st_dev: 80001f, st_ino: 3b03, key: 5702fb03
Очевидно, идентификатор определяет старшие 8 бит ключа; младшие 12 бит st_dev определяют следующие 12 бит ключа, и наконец, младшие 12 бит st_ino определяют младшие 12 бит ключа.
Цель этого примера не в том, чтобы впоследствии рассчитывать на такой способ формирования ключа из перечисленной информации, а в том, чтобы проиллюстрировать алгоритм комбинации полного имени и идентификатора конкретной реализацией. В других реализациях алгоритм может быть другим.
ПРИМЕЧАНИЕ
В FreeBSD используются младшие 8 бит идентификатора, младшие 8 бит st_dev и младшие 16 бит st_ino.
Учтите, что отображение, производимое функцией ftok, — одностороннее, поскольку часть бит st_dev и st_ino не используются. По данному ключу нельзя определить полное имя файла, заданное для вычислений.