next up previous contents
下一节: ipcs 命令 上一层: 6.4.1 基本概念 前一节: IPC 标识符

IPC 键

为了获得唯一的 ID,必须使用。 客户端和服务器进程必须双方都同意这个键。 这代表了为应用程序构建客户端/服务器框架的第一步。

当您使用电话呼叫某人时,您必须知道他们的号码。 此外,电话公司必须知道如何将您的呼出电话转接到最终目的地。 一旦对方通过接听电话做出响应,连接就建立了。

在 System V IPC 机制中,“电话”直接对应于正在使用的对象类型。“电话公司”或路由方法可以直接与 IPC 键关联。

键可以是每次都相同的值,通过将键值硬编码到应用程序中。 这样做有一个缺点,即该键可能已经被使用。 通常,ftok() 函数用于为客户端和服务器生成键值。


  LIBRARY FUNCTION: ftok();

  PROTOTYPE: key_t ftok ( char *pathname, char proj );
    RETURNS: new IPC key value if successful
             -1 if unsuccessful, errno set to return of stat() call

从 ftok() 返回的键值是通过将第一个参数中文件的 inode 号和次设备号与第二个参数中的单字符项目标识符组合生成的。 这并不能保证唯一性,但是应用程序可以检查冲突并重试键生成。


        key_t   mykey;
        mykey = ftok("/tmp/myapp", 'a');

在上面的代码片段中,目录/tmp/myapp与单字母标识符'a'相结合。 另一个常见的例子是使用当前目录


        key_t   mykey;
        mykey = ftok(".", 'a');

所使用的密钥生成算法完全由应用程序员自行决定。 只要采取措施防止竞争条件、死锁等,任何方法都是可行的。 为了我们的演示目的,我们将使用 ftok() 方法。 如果我们假设每个客户端进程都将从唯一的“home”目录运行,那么生成的密钥应该足以满足我们的需求。

无论如何获得的键值,都将在后续的 IPC 系统调用中使用,以创建或访问 IPC 对象。


next up previous contents
下一节: ipcs 命令 上一层: 6.4.1 基本概念 前一节: IPC 标识符

转换于
1996 年 3 月 29 日星期五 14:43:04 EST