gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:34:23 27 4
gpt4 key购买 nike

在我的另一个问题中,一位用户帮助我通过共享内存发送字符串。但是,当我尝试接收此数据时,程序显示 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 * 但它也不起作用 (char *line = (char *)shmat(...);)。

最佳答案

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

C++ 委员会在某个时候设想您应该能够使用共享内存分配器,该分配器将使用相对指针(例如 see here ):

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

但是,这受到标准库实现的未指定性质的阻碍;该标准实际上并不强制要求使用分配器的标准库类也在内部使用分配器指针。 (我认为这是 LWG 1521 。)

关于c++ - 从共享内存中读取字符串 C++ POSIX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com