如何将字符串转换为key_t
,以便使用shmget
创建共享内存段?
这是因为映射共享内存的密钥是通过TCP / IP传输的。
提前致谢!
答案 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()函数使用由给定路径名命名的文件的标识(必须引用现有的可访问文件)和proj_id的最低8位(必须非零) ) 生成key_t类型的System V IPC密钥,适用于 msgget(2), semget(2)或 shmget(2)
当使用相同的proj_id值时,对于命名同一文件的所有路径名,结果值相同。当(同时存在的)文件或时,返回的值应该不同 项目ID不同。