将字符串转换为key_t

时间:2014-06-24 12:41:06

标签: c linux shared-memory sysv-ipc

如何将字符串转换为key_t,以便使用shmget创建共享内存段?

这是因为映射共享内存的密钥是通过TCP / IP传输的。

提前致谢!

2 个答案:

答案 0 :(得分:0)

确保接收方以与发送方将其放在线上相同的方式解释数据。

例如,如果发件人

char buf[32];
*((key_t*)buf) = data;

并通过网络发送32字节缓冲区,接收方应将它们读入匹配缓冲区并使用

提取key_t
data = *((key_t*)buf);

答案 1 :(得分:0)

密钥是通过调用ftok()创建的。后者使用文件路径和8位值来执行此操作。

对于相同的文件路径和相同的8位值ftok()(重新)创建相同的密钥。

因此,传输文件路径和8位值(通常是另一个char),让接收者在收到的值上调用ftok()。这将创建与发件人使用的密钥相同的密钥。

来自ftok()'s documentation

  

ftok()函数使用由给定路径名命名的文件的标识(必须引用现有的可访问文件)和proj_id的最低8位(必须非零) )          生成key_t类型的System V IPC密钥,适用于 msgget(2) semget(2) shmget(2)

     

当使用相同的proj_id值时,对于命名同一文件的所有路径名,结果值相同。当(同时存在的)文件或时,返回的值应该不同          项目ID不同。