COHERENT manpages

This page displays the COHERENT manpage for ftok() [Generate keys for interprocess communication].

List of available manpages
Index


ftok() -- General Function (libc)

Generate keys for interprocess communication
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(filename, procid)
char *filename;
char procid;

The  COHERENT system  implements  three methods  by which  one process  can
communicate with another: semaphores, messages, and shared memory.  In each
case, a  process must use a  key of type key_t (which  is defined in header
file <sys/types.h>) to identify itself.

One problem is that each process  generates its own key, by its own method.
Therefore, two  processes could independently generate  the same key, which
could create serious problems for interprocess communication.

The function ftok()  generates keys for processes that perform interprocess
communication.  filename is the full path  name of a file.  This can be the
full path name of the file  in which the program resides on disk.  The file
named in filename must exist and  be accessible for the system call stat(),
or ftok() will fail.  procid  is a one-character identifier with which this
process distinguishes  itself from all  other processes that  are pegged to
filename. How a process generates procid is up to the program itself.

For example, the  program myproc can generate a unique  key for itself with
the call:

    key_t mykey;
    mykey = ftok("/usr/bin/myproc", 'A');

Note the following caveats:

-> Because ftok()  generates its key  from a file's i-node  major and minor
   numbers rather  than its name, it  generates the same key  for two files
   that   are   linked.   For   example,   if   files  /usr/henry/foo   and
   /usr/henry/bar are linked to each other, then the calls

       ftok("/usr/henry/foo", 'A');

   and

       ftok("/usr/henry/bar", 'A');

   will generate the same key.

-> If the file named by filename  is destroyed and then recreated, the call
   to  ftok() generates  a different  key than it  did before  filename was
   destroyed.

-> If the file named by filename does not exist, ftok() returns (key_t) -1.

Example

For an example of this function, see the entry for msgget().

See Also

ipc.h,
libc,
msgget(),
semget(),
shmget()