gpt4 book ai didi

c - 无法写入 C 中的共享内存缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:34 25 4
gpt4 key购买 nike

假设我有一个缓冲区:

int * buffer;

并且这个缓冲区被多个进程共享(共享内存)。

如果我想从/向那个缓冲区读/写我该怎么做?

我问这个是因为我找到了很多信息和各种不同的方法来解决这个问题,但答案缺乏组织,变得非常困惑和难以理解。

这是我用来创建共享内存段的函数:

void * create_shared_memory(char *name, int size) {

int *ptr;
int ret;

int fd = shm_open (name, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);

if (fd == -1) {
perror ("shm_open error!");
exit (1);
}

ret = ftruncate (fd, sizeof (size));

if (ret == -1) {
perror ("ftruncate error!");
exit (2);
}

ptr = mmap(0, sizeof (size), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

if (ptr == MAP_FAILED) {
perror ("shm-mmap error!");
exit (3);
}

return ptr;

}

最佳答案

创建并映射共享内存段,从而获得指向它的指针后,您可以通过该指针读取或写入它。就语法和机制而言,这与任何其他内存相同。您可以用任何您喜欢的方式围绕它包装函数,但您并不是天生就需要这样做。

然而,正如 EOF 所观察到的,共享内存语义比非共享内存语义复杂得多。您需要围绕共享内存访问使用适当的同步辅助工具,以确保线程和/或进程正确协作,否则结果是不确定的。

关于c - 无法写入 C 中的共享内存缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371398/

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