- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是创建共享内存段的方式:
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/
我需要通过 posix 消息队列与 java 应用程序和 c 进程进行通信,并且我在 java 应用程序中使用 JNA。 在C进程中,创建消息队列时我使用的是: key_t key = 112233;
我正在使用 shmget() 分配一个共享内存段,然后我将其与 pthread_mutex_init() 一起使用以创建进程间共享的互斥量。通常,这会按预期工作。然而,偶尔 shmget() 会返回
这是创建共享内存段的方式: memory_id = shmget(key, memory_size, IPC_CREAT | 0755); 0755 部分告诉我,这可能就像在仅存在于内存中的文件系统上
我正在学习如何使用 shmget() 创建共享内存.到目前为止,我找到的所有示例都使用 IPC_CREAT | 标志的格式(或类似的东西)。当我检查我的 bits/ipc.h内容 IPC_CREAT被
shmget for IPC in linux 有人可以解释一下上面代码中的 shmget() unix 系统调用中的 IPC_CREAT |0666 到底做了什么,我知道 0666 在这里是八进制值
我是一名优秀的程序员,十分优秀!