如何解决共享内存和文件的关系
忽略一些细节,Linux 中有两个低级 SHM API 可用。
我们有较旧的(例如fields
)SysV 接口,使用:
- ftok
- shmctl
- shmget
- shmat
- shmdt
和更新 Posix 接口(虽然 Posix 似乎也标准化了 SysV 接口):
- shm_open
- shm_unlink
当使用 shm_open() 时,文件和共享内存段之间似乎存在明确的 1 对 1 映射。 但是,如果您使用 shmget(),您可以使用例如:
将多个段与单个路径相关联key1=ftok(path,1);
key2=ftok(path,2);
shmget(key1,...)
shmget(key2,...)
在这种情况下,文件和段之间的关系如何? 给 ftok 的路径只是一个占位符。我看不出它的用途是什么。 如果我们将 Unix 哲学视为一切都是文件,为什么这不是一对一的映射?
单独但相关的问题:
- SysV 接口是否应该被视为已弃用?
System V IPC vs POSIX IPC 或 shm_open 中没有这样的建议
我只能找到模糊的建议,例如:
我认为 SysV 的线程安全性较低。
在现代应用程序中,您有什么理由更喜欢 SysV 版本(或 posix 版本)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。