如何将字符串转换为key_t
, 以便使用它来创建共享内存段shmget
?
这是因为映射共享内存的密钥是通过 TCP/IP 传输的。
提前致谢!
如何将字符串转换为key_t
, 以便使用它来创建共享内存段shmget
?
这是因为映射共享内存的密钥是通过 TCP/IP 传输的。
提前致谢!
确保接收方以与发送方将数据放在线路上相同的方式解释数据。
例如,如果发件人这样做
char buf[32];
*((key_t*)buf) = data;
并通过网络发送 32 字节缓冲区,接收器应将它们读入匹配缓冲区并提取key_t
使用
data = *((key_t*)buf);
密钥是通过调用创建的ftok()
。后者使用文件路径和 8 位值来执行此操作。
对于相同的文件路径和相同的 8 位值ftok()
(重新)创建相同的密钥。
所以传输文件路径和 8bit 值(通常是另一个char
)并让接收器调用接收ftok()
到的值。这将创建与发送者使用相同的密钥。
来自ftok()
的文档:
ftok()函数使用由给定路径名命名的文件的 标识(必须引用现有的、可访问的文件)和 proj_id 的最低有效 8 位(必须为非零)来生成 key_t 类型的 System V IPC 密钥,适用于msgget(2)、semget(2)或shmget(2)。
当使用相同的 proj_id 值时,命名同一文件的所有路径名的结果值相同。当(同时存在的)文件或项目 ID 不同时,返回的值应该不同。