The
ftok() function uses the identity of the file named
by the given pathname (which must refer to an
existing, accessible file) and the least significant 8 bits
of proj_id (which must be nonzero) to generate a
key_t type System V IPC key, suitable for use with
msgget(2), semget(2), or shmget(2).

The resulting
value is the same for all pathnames that name the same file,
when the same value of proj_id is used. The value
returned should be different when the (simultaneously
existing) files or the project IDs differ.

Today,
proj_id is an int, but still only 8 bits are
used. Typical usage has an ASCII character proj_id,
that is why the behavior is said to be undefined when
proj_id is zero.

Of course, no
guarantee can be given that the resulting key_t is
unique. Typically, a best-effort attempt combines the given
proj_id byte, the lower 16 bits of the inode number,
and the lower 8 bits of the device number into a 32-bit
result. Collisions may easily happen, for example between
files on /dev/hda1 and files on /dev/sda1.

This page is
part of release 4.16 of the Linux man-pages project.
A description of the project, information about reporting
bugs, and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.