`
king_tt
  • 浏览: 2110315 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何用ftok来产生相关的key_t值

 
阅读更多
在System V中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。这个在IPC的环境中十分的重要,比如说,服务器创建了一个消息队列,等待 客户机发送请求。那么如何创建或者打开已有的消息队列呢?一般而言,我们对于服务器使用的路径和项目id(proj_id)是已知的,所以客户机可以获取 相同的key来打开 消息队列并进行操作。下面就是ftok的使用原型:
# include <sys/types.h>
# include <sys/ipc.h>

key_t ftok(const char *pathname, int proj_id);
注意:
1)pathname一定要在系统中存在
2)pathname一定是使用进程能够访问的
3)proj_id是一个1-255之间的一个整数值,典型的值是一个ASCII值。
当成功执行的时候,一个key_t值将会被返回,否则-1被返回。我们可以使用errno来确定具体的错误信息(对于errno的相关信息,请参考http://blog.csdn.net/hello_wyq/archive/2006/08/01/1006216.aspx),如果我们很懒惰的话,不妨就使用perror函数来答应对应的出错字符信息。
下面的程序简单的演示和打印如何使用ftok及其对应值
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
int main( void )
{
for ( int i = 1; i < 256; ++ i )
printf( "key = %ul/n", ftok( "/tmp", i ) );
return 0;
}
分享到:
评论

相关推荐

    linux系统调用之ftok()

    如指定文件的索引节点号为65538,换算成16进制为0x010002,而你指定的ID值为38,换算成16进制为0x26,则最后的key_t返回值为0x26010002。 查询文件索引节点号可通过命令: ls -i来查看 nux Programmer's Manual ...

    Linux /Unix 共享内存

    在IPC中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。 函数原型: key_t ftok(const char *pathname, int proj_id); Keys: 1)pathname一定要在系统中存在并且进程能够访问的 3)proj_id是一...

    linux环境编程-ftok()函数详解.docx

    linux环境编程-ftok()函数详解.docx

    Shell脚本实现ftok函数

    IPC Key 的时候可以使用任意自己喜欢的 Key ,但为了避免与其他的程序产生定义重复,在 UNIX/Linux 中一般会使用 key_t ftok(const char *path, int id) 函数来生成一个比较唯一的 Key 值。然而,“每个人都讨厌 ...

    PHP进程通信基础之信号量与共享内存通信

    下面我们看下一个伪代码信号量的使用。 1、创建信号量唯一标识符 $ftok = ftok(__FILE__, 'a'); 2、创建信号量资源ID $sem_resouce_id = sem_get($ftok); 3、接受信号量 sem_acqure($sem_reso

    PHP多进程通信-消息队列使用

    $key=ftok(__FILE__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 //msg_send($queue, 1, Hello, 1); //接收消息,如果接收不到会阻塞 msg_receive($queue, 1, $message_type, 1024, $message...

    3_read.rar_return

    key_t key int shm_id char *buf //鑾峰緱key if((key = ftok( ./ ,0xa)) &lt; 0){ perror( ftok ) exit(1) } //鑾峰緱鍏变韩鍐呭瓨 if((shm_id = shmget(key,SHM_SIZE,IPC_CREAT|0644)) &lt; 0)...

    PHP共享内存用法实例分析

    $shm_key = ftok(__FILE__, 't'); /** 开辟一块共享内存 int $key , string $flags , int $mode , int $size $flags: a:访问只读内存段 c:创建一个新内存段,或者如果该内存段已存在,尝试打开它进行读写 w:可...

    PHP消息队列用法实例分析

    $key = ftok(__DIR__, 'R'); #获取队列中的消息 $q = msg_get_queue($key); #删除队列 msg_remove_queue($q); #获取队列的状态信息 $status = msg_stat_queue($q); print_r($status); echo "\n"; for($i=0;$i&lt;100...

    php进程间通讯实例分析

    分享给大家供大家参考,具体如下: ...php多进程主要使用for进行分裂,然后利用的unix/linux的信号量进行...$key = ftok(__FILE__, "a"); $queue = msg_get_queue($key); // 进程ID $producer_pid = 0; $consumers_pid =

    linux 共享内存浅析

    ftok()会返回一个key_t型的值,也就是计算出来的标识符的值。 shmkey = ftok( "mcut" , 'a' ); // 计算标识符 操作共享内存,我们用到了下面的函数 #include #include #include int shmget( key_t shmkey , int...

    UNIX网络编程 卷2:进程间通信

     3.2 key_t键和ftok函数 20  3.3 ipc_perm结构 22  3.4 创建与打开IPC通道 22  3.5 IPC权限 24  3.6 标识符重用 25  3.7 ipcs和ipcrm程序 27  3.8 内核限制 27  3.9 小结 28  习题 29  第二部分 消息传递 ...

    UNIX网络编程 卷2 进程间通信 带完整书签,完整目录

    3.2 key_t键和ftok函数 20 3.3 ipc_perm结构 22 3.4 创建与打开IPC通道 22 3.5 IPC权限 24 3.6 标识符重用 25 3.7 ipcs和ipcrm程序 27 3.8 内核限制 27 3.9 小结 28 习题 29 第二部分 消息传递 31 第4章 ...

    UNIX Network Programming Volume 2(Unix网络编程卷2英文版)

    3.2 key_t keys and ftok function 28 3.3 ipc_perm structure 30 3.4 creating and opening ipc channels 30 3.5 ipc permissions 32 3.6 identifier reuse 34 3.7 ipcs and ipcrm programs 36 3.8 kernel ...

    《UNIX网络编程 第2版. 第2卷, 进程间通信(中文版)》(W·Richard Stevens[美] 著)

    3.2 key_t键和ftok函数 20 3.3 ipc_perm结构 22 3.4 创建与打开IPC通道 22 3.5 IPC权限 24 3.6 标识符重用 25 3.7 ipcs和ipcrm程序 27 3.8 内核限制 27 3.9 小结 28 习题 29 第二部分 消息传递 第4章 管道和FIFO 32 ...

    UNIX网络编程 第2卷 进程间通信

    3.2 key_t键和ftok函数 20 3.3 ipc_perm结构 22 3.4 创建与打开IPC通道 22 3.5 IPC权限 24 3.6 标识符重用 25 3.7 ipcs和ipcrm程序 27 3.8 内核限制 27 3.9 小结 28 习题 29 第二部分 消息传递 第4章 管道和FIFO 32 ...

    linux ipc的简单使用

    linux环境下ipc技术点的简单使用,包括ftok,msg相关函数的使用等

    PHP下操作Linux消息队列完成进程间通信的方法

    关于Linux系统进程通信的概念及实现可查看:http://www.ibm.com/developerworks/cn/linux/l-ipc/   关于Linux系统消息队列的概念及实现可查看:...php $message_queue_key = ftok(__

    IPC工作模式

    IPC简介,寄存器配置,工作模式介绍,最小使用,增加数据通路,增加动态分配,强大但易用的消息机制,欢迎指正批评。

Global site tag (gtag.js) - Google Analytics