0

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

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

提前致谢!

4

2 回答 2

0

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

例如,如果发件人这样做

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

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

data = *((key_t*)buf);
于 2014-06-24T13:01:51.610 回答
0

密钥是通过调用创建的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 不同时,返回的值应该不同。

于 2014-06-24T14:04:24.803 回答