linux - 共享内存中的链表,linux内核

标签 linux shared-memory

这是一个面试问题,我仍然对此感到困惑。

实现 2 个 API - 1.访问共享内存中存在的链表的头部

2.访问头部之后的元素

问题中的内核是Linux。

我在论坛上看到,不是使用指针,而是应该使用偏移量(如果不使用指针,它仍然是链表吗)

这部分我不是很懂。考虑到虚拟内存到位,也对将发生的地址转换感到好奇。

很抱歉这个问题含糊不清,但这就是我能弄清楚的。

感谢任何帮助。

谢谢

最佳答案

您不能使用指针,因为无法确保共享内存在两个进程中都映射到同一地址。一个进程不知道如何处理指向另一个进程的虚拟地址空间的指针。

因此,您将偏移量存储到共享内存块中。两个进程都确切地知道共享内存块的第 712 个字节是什么。要访问这样的偏移量,您需要将偏移量添加到共享内存块在此特定进程中映射到的基地址,这会创建一个您可以在该特定进程中使用的指针。

关于linux - 共享内存中的链表,linux内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439780/

相关文章:

java - 何时以及为何运行替代方案 --install java jar javac javaws on installing jdk in linux

linux - 无法在 Perforce P4V Linux 客户端中查看与特定标签关联的文件

c - 我如何始终包含静态库中的符号?

java - 使用 exec ('command' ) 方法从 java 执行 linux 命令

使用 POSIX 标准将结构复制到 C 中的共享内存

c++ - 当一个进程截断由 boost 进程间库创建的共享内存时,进程需要重新映射

C:如何shmat一个结构?

php - exec 命令未在 Linux 主机上运行

c - 如何向套接字发送信号?

concurrency - 寻找监视器与信号量的良好类比/示例