gpt4 book ai didi

c - IPC_CREAT - 是否应该将其简单地视为 "empty file"中的 "memory"?

转载 作者:行者123 更新时间:2023-11-30 16:43:35 24 4
gpt4 key购买 nike

这是创建共享内存段的方式:

memory_id = shmget(key, memory_size, IPC_CREAT | 0755);

0755 部分告诉我,这可能就像在仅存在于内存中的文件系统上创建一个"file"。

这样看是否正确?

这是否也意味着..我必须将数据存储到其中,就好像它只是一个文件一样?

换句话说,不可能有这样的事情......在一个文件中创建 2 个文件。

我必须简单地连接字符串,并用特殊字符(例如管道符号)分隔它们。并将它们一次性全部写入内存中已创建的文件?

最佳答案

是的,除了某些事情......你不能write(2)到共享内存段。您必须 shmat(2) 将其附加到进程内存,然后您就可以访问它(就好像它是 malloc(2) 的结果一样 ---但是事实并非如此,无论如何你都无法释放(3))

完成后,您可以简单地 shmdt(2) 就像释放它一样(这不会将其作为系统资源释放,但它会继续为另一个进程保留其内容使用它们)

0755 实际上是权限位,因为该资源作为文件进行管理。当您shmat(2)时,系统会检查权限位的访问权限,如果您没有足够的资源访问权限,则会收到错误消息。不使用执行位,因此您的权限应使用 0644 (执行位被保留,因此应为 0)

共享内存段是一种昂贵的资源,因为它们消耗系统主内存(尽管它们在需要时被交换),并且当创建它们的进程exit(2),所以要小心,它们只有在系统重新启动后才可用。

请注意,如果您创建对共享内存段中位置的引用,它们将引用写入进程的虚拟空间中的私有(private)虚拟内存地址...如果内存段附加到另一个进程的内存,所有这些内存地址都将无效(或者必须进行偏移以匹配其他进程虚拟内存空间)

关于c - IPC_CREAT - 是否应该将其简单地视为 "empty file"中的 "memory"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45130295/

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