Linux 将虚拟内存范围映射到现有虚拟内存范围?

2024-02-01

在Linux中,有没有一种方法(在用户空间中)将虚拟地址范围映射到支持现有虚拟地址范围的物理页面? mmap() 函数只允许映射文件或“新”物理页。我需要能够做这样的事情:

int* addr1 = malloc(SIZE);
int* addr2 = 0x60000;      // Assume nothing is allocated here
fancy_map_function(addr1, addr2, SIZE);
assert(*addr1 == *addr2);  // Should succeed
assert(addr1 != addr2);    // Should succeed

我很好奇,所以我测试了问题评论中建议的共享内存想法,它似乎有效:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <assert.h>

#define SIZE 256
int main (int argc, char ** argv) {
  int fd;
  int *addr1, *addr2;

  fd = shm_open("/example_shm", O_RDWR | O_CREAT, 0777);
  ftruncate( fd, SIZE);
  addr1 = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  addr2 = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

  printf("addr1 = %p addr2 = %p\n", addr1, addr2);
  *addr1 = 0x12345678;
  assert(*addr1 == *addr2);  // Should succeed
  assert(addr1 != addr2);    // Should succeed

  return 0;
}

(显然,真实的代码需要检查系统调用的返回值是否有错误并自行清理)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 将虚拟内存范围映射到现有虚拟内存范围? 的相关文章

随机推荐

  • 在 HTML 中向下滚动

    如何滚动myDiv在下面的代码中 此代码向下滚动整个浏览器窗口的内容 我只需要向下滚动一个分割层
  • 为什么“取消引用”和“地址”运算符位于左侧?

    在 C 以及其他一些类似 C 的语言 中 我们有 2 个一元运算符用于处理指针 解引用运算符 和 地址 运算符 他们是left一元运算符 这会带来运算顺序的不确定性 例如 ptr gt field or arr id 操作顺序is标准严格定
  • 计算数据帧中数字连续出现的次数

    我有一个包含 1 和 0 的虚拟列的数据框 我想计算每行 1 或 0 出现的次数 每次都从 0 开始 对 1 进行累加计数 对 0 进行倒数计数下面是一个例子 import pandas as pd df pd DataFrame Dumm
  • Excel:检查单元格是否包含文本字符串中的数字

    我有一个工作表 每个单元格中都有文本字符串 文章标题 我想知道单元格是否包含数字 例如 This is 3 gt TRUE Red balloon gt FALSE It s 10 things gt TRUE Update 这里的每个答案
  • python urllib2:连接被对等方重置

    我有一个 Perl 程序 可以从我的大学图书馆的数据库中检索数据 并且运行良好 现在想用python重写但是遇到问题
  • 无法单击 iframe 中的下拉菜单 - Selenium Python

    问题 尝试使用 Chrome 驱动程序和 Selenium 以及 Python 单击 iframe 内的下拉菜单 大家好 昨天一位用户好心地帮助我解决了一个新手查询 我无法单击 url 中的链接 这是因为我必须切换到 iframe 这部分代
  • 如何在C#中手动使用资源(无IDE行为)?

    我正在使用 Visual Studio 学习 C 我想更深入一点 我想知道如何手动使用项目资源 不是通过 IDE 我搜索了该网站 但我刚刚看到这个家伙的帖子如何在 NET中创建和使用资源 https stackoverflow com qu
  • 在 Firefox 扩展中使用 indexedDB

    我无法在 Firefox 扩展中使用 indexedDB 保存数据 我也找不到有关 indexedDB 和 Firefox 扩展的任何信息 有人处理过这个吗 唯一的问题是 对于indexedDB您需要一个窗口 除此之外 从附加组件使用它时没
  • XMLReader 未知

    按照此介绍 http csharp net tutorials com xml reading xml with the xmlreader class 可以通过导入命名空间来使用 XMLReader 类System Xml 在我的 Vis
  • 使用 SWAPI(星球大战 API)的 React 项目出现混合内容错误

    我构建一个 React 项目只是为了尝试一些东西 我在使用时遇到问题SWAPI 星球大战 API https swapi dev 我不断收到Mixed Content Error当我尝试在我的 React 项目中通过 axios 使用他们的
  • istio egressgateway:通过静态 IP 进行路由

    我尝试通过静态 IP 从 GKE 集群中的应用程序路由出站流量 因为目标服务器需要将 IP 列入白名单才能访问 我已经能够使用 terraformed nat 网关来执行此操作 但这会影响来自集群的所有流量 按照网站上的 istio 指南
  • 链表部分

    我想我可能做对了 headByRating 和 headByName 都引用相同的地址 我整天都在画图表尝试新事物等 但我并没有真正取得任何进展 我有两个列表指针 headByRating 和 headByName 以及两个节点指针 nex
  • 如何通过命令行在副本集中的辅助mongodb服务器中设置rs.slaveOk()?

    如何通过命令行在副本集中的辅助mongodb服务器中设置rs slaveOk 我尝试了以下方法 MONGO HOME bin mongo port MONGO PORT2 host MONGO SECONDARY2 eval printjs
  • 在 WebForm_OnSubmit 之后调用自定义客户端验证函数? 。网

    我想在我的 NET 验证器控件运行其 javascript 后运行一个简单的 JS 函数 我的onsubmit值是javascript return WebForm OnSubmit 它似乎是自动生成的 我无法更改它 我是否正确地假设我只需
  • SQL Server 中的 ALTER 与 DROP & CREATE

    SQL Server中创建存储过程后为什么要替换Create with Alter 如果我们不改变它 执行时会发生什么 除了检查是否存在并删除之外 还有更好的替代方法吗 Create如果表存在将会失败 Alter如果表不存在将会失败 如果你
  • Laravel dusk:使用 Dropzone.js 测试文件上传

    我正在使用拉拉维尔5 6 and Dusk对于这个具体的测试 我正在尝试在我的拖放区中断言文件上传 但我的 Dropzone 是以我没有的方式创建的file输入元素 所以我不能使用attach method 所以我尝试了以下方法 file
  • 将自定义 Oauth 提供程序与 firebase.auth().signInWithRedirect 集成?

    我使用以下命令设置了 Twitch OAuth 集成Instagram 示例 https github com firebase functions samples tree master instagram auth 现在我可以通过打开登
  • 在续集种子中查找记录

    我一直在尝试为我的项目编写一些种子 但遇到了一些障碍 我有一个many to many与我的关系users and roles桌子 因此 当我播种数据库时 我需要将具有正确 ID 的记录添加到连接表中 为了做到这一点 我需要通过以下方式找到
  • 如何使用 wcstombs 代替 WideCharToMultiByte ?

    wcstombs有三个参数 WideCharToMultiByte有八个args 如何更换 How use wcstombs像这样写 int kk WideCharToMultiByte 936 0 szBn ccBn 1 0 0 0 0
  • Linux 将虚拟内存范围映射到现有虚拟内存范围?

    在Linux中 有没有一种方法 在用户空间中 将虚拟地址范围映射到支持现有虚拟地址范围的物理页面 mmap 函数只允许映射文件或 新 物理页 我需要能够做这样的事情 int addr1 malloc SIZE int addr2 0x600