从共享内存C ++ POSIX读取字符串

时间:2016-01-03 22:51:44

标签: c++ string posix shared-memory

在我的另一个问题中,一个用户通过共享内存帮助我发送字符串。但是,当我尝试接收此数据时,getWindow()说。我试试这段代码:

Core dumped

我还尝试将其重写为key_t lineKey = ftok("/tmp", '1'); int sharedLine = shmget(lineKey, sizeof(std::string), IPC_CREAT | 0666); std::string *line = (std::string *)shmat(sharedLine, NULL, 0); sem_t *reader1_sem; reader1_sem = sem_open("reader1_sem", O_CREAT, 0666, 0); while (1) { sem_wait(reader1_sem); std::cout << (*line); } ,但它也不起作用(char *)。

1 个答案:

答案 0 :(得分:3)

您不能在共享内存上放置std::string;在运行过程之外,存储在此对象内部的指针没有意义。

C ++委员会在某种程度上设想你应该能够使用一个使用相对指针的共享内存分配器(例如,可能是see here):

std::basic_string<char, std::char_traits<char>, magic_allocator<char>>

然而,标准库实现的未指定性质阻碍了这一点;标准实际上并没有要求使用分配器的标准库类也在内部使用分配器指针。 (我认为这是LWG 1521。)

相关问题