通常情况下,该id值通过ftok函数得到。 ftok原型如下: key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。 当成功执行的时候,一个key_t值将会被返回,否则 -1 被返回。 在一般的UNIX实现中,是将文件...
函数ftok把一个已存在的路径名和一个整数标识得转换成一个key_t值,称为IPC键: # include # include 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 ...
3. proj_id的低序8位(不能为0) 从程序运行的结果可以看出,ftok调用返回的整数IPC键由proj_id的低序8位(57),st_dev成员的低序8位(02),st_info的低序16位组合而成(4219)。 注:两进程如在pathname和proj_id上达成一致(或约定好),双方就都能够通过调用ftok函数得到同一个IPC键。 那么ftok是怎么实现的呢?
for ( int i = 1; i < 256; ++ i ) printf( "key = %ul/n", ftok( "/tmp", i ) ); return 0; }
通常情况下,该id值通过ftok函数得到。ftok原型如下:key_tftok( char * fname, int id )fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。当成功执行的时候,一个key_t值将会被返回,否则 -1 被...
我没有其他选择,只能尝试ftok()一些随机文件吗?我是否必须为我想要创建的不同共享内存的每个块选择不同的文件? 感谢您的时间。 Joh*_*ger5 我知道 IPC_PRIVATE 在调用 shmget() 创建它时会生成一个唯一的密钥 不,你误会了。IPC_PRIVATE不生成akey_t,它是akey_t。这种特殊情况key_t会引发特殊行为,shmget(...
让这两个进程都能看到这块内存。(这里也称为进程和共享内存挂接) 最后如果不想通信了:
key: ftok() 返回的 key 值 msgflg: 标识函数的行为及消息队列的权限,其取值如下: IPC_CREAT:创建消息队列。 IPC_EXCL: 检测消息队列是否存在。 位或权限位:消息队列位或权限位后可以设置消息队列的访问权限,格式和open() 函数的 mode_t 一样(open() 的使用请点此链接),但可执行权限未使用。
让这两个进程都能看到这块内存。(这里也称为进程和共享内存挂接) 最后如果不想通信了:
3key_t ftok (constchar*pathname,intproj_id); pathname 通常是跟本应用用关的目录;proj_id指的是本应用所用到的IPC的一个序列号;成功返回IPC键,失败返回-1; 注:两进程如在pathname和proj_id上达成一致(或约定好),双方就都能够通过调用ftok函数得到同一个IPC键。