ftok函数的使用

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

头文件

#include <sys/types.h>

#include <sys/ipc.h>

函数原型:

key_t ftok( const char * fname, int id )

fname就是你指定的文件名(已经存在的文件名),一般使用当前目录,如:

key_t key;

key = ftok(".", 1); 这样就是将fname设为当前目录。

id是子序号。虽然是int类型,但是只使用8bits(1-255)。

时间: 2024-10-13 11:15:01

ftok函数的使用的相关文章

linux ftok()函数

函数原型 key_t ftok(const char *pathname, int proj_id); #pathname: 指定的文件名,该文件必须是存在而且可以访问 #proj_id:子序号,只有8个比特被使用(0-255) #当成功执行时,返回一个key_t值,失败返回-1 ftok实现原理 ftok返回的key_t在Linux中是一个32位的值,它通过取proj_id参数的最低8个有效位.包含pathname指定文件所属的文件系统的设备的次要设备号的最低8个有效位以及pathname所指

ftok()函数的使用

在上一篇文章中,Mayuyu讲述了共享内存的原理以及使用方法.在创建共享内存之前,必须指定一个ID值,而这个ID值通常是通过现在要讲的ftok()函数得到.ftok()函数原型如下 其中参数fname是指定的文件名,这个文件必须是存在的而且可以访问的.id是子序号,它是一个8bit的整数.即范围是0~255. 当函数执行成功,则会返回key_t键值,否则返回-1.在一般的UNIX中,通常是将文件的索引节点取出,然后在前面加上子序号就得到key_t的值.查看文件索引节点号的方法是使用命令:ls -

ftok函数例子

#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>int main( void ){ int id=2; //char a[]="hello world"; //int k=ftok(a,id);//该文件必须是存在而且可以访问的,否则返回-1,函数执行失败 int k=ftok("myfile",id);//格式为:"文件名",文件名的路径

linux ftok()函数 --多进程IPC之共享内存

系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到.ftok原型如下:key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255). 当成功执行的时候,一个key_t值将会被返回,否则 -1 被返回. 在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值.如指定文件的索引节

Linux中函数ftok如何产生键值

我们在做linux 进程间通信开发时,经常会用到ftok函数去产文唯一键值,那么这个键值是如何产生的呢. 函数原型:key_t ftok( const char * fname, int id );应用:key_t key=ftok(".",'A'); fname为已经存在的文件名,本文为"."表示当前目录: id为子序号,值范围只有8bits(0-255). 下面我们举例说明如何产生键值,代码ftok_test.c如下: #include <stdio.h&

PHP共享内存段实现,使用shmop函数实现内存共享

所谓内存共享:就是多个应用程序公用一个内存段,在A程序中可以获取B程序存储在这个内存段的数据,也就是数据共享. shmop是PHP提供的函数集,在配置PHP的时候使用 -enable-shmop后,就可以使用这个函数集提供的函数, shmop对LINUX更加友好,而对于WINDOWS来说就不怎样了,不支持CGI和CLI模式~有点尴尬. 来说说他提供的一些函数: ftok函数:生成一个数字或叫做键或key.$key = ftok(fileName, mode); 一般情况下,这个fileName可

IPC----消息队列二.函数接口

消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识.具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息.在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达.System V 消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除.可以将内核中的某个特定的消息队列画为一个消息链表,如下图所示: 对于系统中每个消息队列,内核维护一个msqid_ds的信

linux系统调用函数

Linux应用编程学习笔记                                 周学伟 一.系统调用文件编程   1.文件打开函数 /***************************************************************************** 函数名:open 函数原型:int open(const char * pathname, int flags) int open(const char * pathname,int  flags,

ftok key值冲突

前两天遇到的关于ftok()函数的问题,当时发了帖子求助,解决后整理于此! 帖子在这儿:ftok产生的key冲突了 最近遇到一个问题,在用户b下创建共享内存失败,跟踪代码发现shmget的errno为17(要创建的这个共享内存已经存在了),可是在该用户下通过ipcs查看确实没有共享内存啊,后来发现,用户a下已经创建的共享内存与用户b要创建的共享内存冲突了,准确的说是key值冲突了,key值是通过ftok函数生成的. 上网查询了一个,ftok是根据文件i节点和调用ftok时的id值产生的,而且还给