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 将虚拟内存范围映射到现有虚拟内存范围? 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 按成员序列化

    我已经实现了template
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 在 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