【问题标题】:pointers in shared memory - C language Linux共享内存中的指针 - C 语言 Linux
【发布时间】:2013-04-10 18:00:18
【问题描述】:

我有这样的共享记忆

struct MEMORY {
char * type;
int number;
}

现在在代码中我让它共享一切可能正常但其他进程看不到指针指向我如何在共享内存中使用指针?

【问题讨论】:

  • 看看。 stackoverflow.com/questions/2489908/…这可以帮助你。
  • 你尝试了什么?还有什么其他进程正在处理它?你读过advancedlinuxprogramming.com,你读过一些好的C编程书吗?
  • 指针指向共享内存之外的东西的问题,一切顺利,好像我将 fork() 设为父进程,子进程必须有共享内存,但指针不起作用
  • 每个进程都有自己的地址空间,你需要非常特殊的系统调用来共享它们的一部分,你还需要一种同步的方法......你的总体目标是什么(为什么你想共享内存)?你的应用是什么?显示更多与您的问题相关的代码......

标签: c linux shared-memory


【解决方案1】:

您需要确保共享内存附加在所有进程的地址空间中的相同地址。否则,你可以想象,指针值最终在不同的进程中意味着不同的东西。

你用什么来共享内存? mmap 还是 shm?它是 mmap 调用中的第一个参数。

如果您不能确保所有进程中的地址空间相同,则另一种方法是仅使用我们的偏移量。每个进程只是从附加共享内存的基地址偏移。

编辑:啊……也许你说的是“char* 类型”是一些任意指针。请记住,其他进程只能查看共享内存中的内容。所有其他内存位置(指针值)都无法访问。因此,要使该指针起作用,它必须指向 in 共享内存中的内容,而不仅仅是任意指针。这样,您需要确保共享内存在所有进程中都附加到相同的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2012-06-02
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多