`
cuiyadll
  • 浏览: 196643 次
文章分类
社区版块
存档分类
最新评论

linux系统调用之ftok()

阅读更多

ftok原型如下:
                        key_t ftok( char * fname, int id )
                        fname就时你指定的文件(存在,可以访问的)名,id是子序号。
先来简单的叙述一下,如果不太清楚的话,再接着向下看:
                ftok函数是根据pathname和id来创建一个关键字(类型为 key_t),此关键字在创建信号量,创建消息队列的时候都需要使用。其中pathname必须是一个存在的可访问的路径或文件,id必须不得为0。

失败返回值为-1

ftok应用范围

         英文是这样描述的; generate  a  key_t  type  System V IPC key, suitable for use with msgget(2),semget(2), or shmget(2).

系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。

在一般的UNIX实现中,是将pathname指定文件的索引节点号取出,前面加上子序号得到key_t的返回值。

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

    nux Programmer's Manual                   FTOK(3)
                                                                                                                                      
NAME
       ftok - convert a pathname and a project identifier to a System V IPC
       key
                                                                                                                                      
SYNOPSIS
       # include <sys/types.h>
       # include <sys/ipc.h>
                                                                                                                                      
       key_t ftok(const char *pathname, int proj_id);
                                                                                                                                      
DESCRIPTION
       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.
                                                                                                                                      
RETURN VALUE
       On success the generated key_t value is returned. On failure -1 is returned, with errno indicating the error as for the stat(2) system
call.

分享到:
评论

相关推荐

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

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

    Shell脚本实现ftok函数

    主要介绍了Shell脚本实现ftok函数,ftok函数是操作系统底层中很有名的一个函数,本文讲在Shell中如何实现同样算法的函数,需要的朋友可以参考下

    linux ipc的简单使用

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

    msgq:System V消息队列(IPC)Python扩展

    此扩展包装和使与System V消息队列相关的系统调用可用于Python应用程序。 公开了以下系统调用: ftok:将路径名和项目标识符转换为System V IPC密钥 msgget:获取消息队列标识符 msgsnd:将消息发送到队列 msgrcv:...

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

    关于Linux系统进程通信的概念及实现可查看:http://www.ibm.com/developerworks/cn/linux/l-ipc/   关于Linux系统消息队列的概念及实现可查看:http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/   PHP...

    Linux /Unix 共享内存

    考虑到应用系统可能在不同的主机上应用,可以直接定义一个key,而不用ftok获得: #define IPCKEY 0x344378 2)shmget()用来开辟/指向一块共享内存的函数 应用说明: shmget()用来获得共享内存区域的ID,如果不存在...

    linux 共享内存浅析

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

    IPC工作模式

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

    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...

    进程管理与通信总结

    基础概念: 进程与程序区别:进程是程序的一次动态执行过程.进程在内存中运行,程序在磁盘中存储. 线程:LWP 进程的通信 BSD(高校):pipe、fifo、信号 System V:share memory、消息队列、信号灯(ftok) BSD:Socket

    常用函数1

    2、该路径是必须存在的,ftok只是根据文件inode在系统内的唯一性来取一个数值,和文件的权限无关 3、proj_id是可以根据自己的约定,随意设置 2、sh

    shared_memory_demo.zip

    System V 共享内存与信号量 C 语言示例代码 ,配套 Makefile 的设计和实现。 ftok(), shmget(), shmat() ftok(), semget(), semctl(), semop()

    3_read.rar_return

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

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

    由于进程之间谁先执行并不确定,这取决于内核的进程调度算法,其中比较复杂。...$ftok = ftok(__FILE__, 'a'); 2、创建信号量资源ID $sem_resouce_id = sem_get($ftok); 3、接受信号量 sem_acqure($sem_reso

    PHP消息队列用法实例分析

    该消息队列用于linux下,进程通信 #根据路径和后缀创建一个id $key = ftok(__DIR__, 'R'); #获取队列中的消息 $q = msg_get_queue($key); #删除队列 msg_remove_queue($q); #获取队列的状态信息 $status = msg_stat...

    php进程间通讯实例分析

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

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

    Richard Stevens的传世之作。卷2着重讨论如何让应用程序与在其他机器上的应用程序进行对话。良好的进程间通信(IPC)机制是提高UNIX程序性能的关键。本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、...

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

    Richard Stevens的传世之作。卷2着重讨论如何让应用程序与在其他机器上的应用程序进行对话。良好的进程间通信(IPC)机制是提高UNIX程序性能的关键。本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、...

Global site tag (gtag.js) - Google Analytics