android开启Sys V IPC,并使用共享内存编程

参考:安卓开启Sys V IPC,并使用共享内存编程 | 久奈浜的CS部

删除config中-# CONFIG_SYSVIPC is not set

在rk3576.config中增加CONFIG_SYSVIPC=y

CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_IPC_NS=y

system/sepolicy/prebuilts/api/34.0/public/domain.te

system/sepolicy/public/domain.te

system/libvintf/check_vintf.cpp

去掉shm限制

+++ b/system/libvintf/check_vintf.cpp
@@ -652,7 +652,8 @@ int main(int argc, char** argv) {if (compat.error().code() == 0) {LOG(ERROR) << "ERROR: files are incompatible: " << compat.error();std::cout << "INCOMPATIBLE" << std::endl;
-        return EX_DATAERR;
+        //return EX_DATAERR;
+        return EX_OK;}LOG(ERROR) << "ERROR: " << strerror(compat.error().code()) << ": " << compat.error();return EX_SOFTWARE;
diff --git a/system/sepolicy/prebuilts/api/34.0/public/domain.te b/system/sepolicy/prebuilts/api/34.0/public/domain.te
index 1da3f51a96a..2bdec93bcf4 100644
--- a/system/sepolicy/prebuilts/api/34.0/public/domain.te
+++ b/system/sepolicy/prebuilts/api/34.0/public/domain.te
@@ -1020,7 +1020,7 @@ neverallow { domain -init -system_server } heapdump_data_file:file read;# that, even assuming only non-buggy and non-malicious code, it is very likely# that over time, the kernel global tables used to implement SysV IPCs will fill# up.
-neverallow * *:{ shm sem msg msgq } *;
+neverallow * *:{ sem msg msgq } *;# Do not mount on top of symlinks, fifos, or sockets.# Feature parity with Chromium LSM.
diff --git a/system/sepolicy/public/domain.te b/system/sepolicy/public/domain.te
index 1da3f51a96a..2bdec93bcf4 100644
--- a/system/sepolicy/public/domain.te
+++ b/system/sepolicy/public/domain.te
@@ -1020,7 +1020,7 @@ neverallow { domain -init -system_server } heapdump_data_file:file read;# that, even assuming only non-buggy and non-malicious code, it is very likely# that over time, the kernel global tables used to implement SysV IPCs will fill# up.
-neverallow * *:{ shm sem msg msgq } *;
+neverallow * *:{ sem msg msgq } *;# Do not mount on top of symlinks, fifos, or sockets.# Feature parity with Chromium LSM.

修改check_vintf.cpp

安卓编译的时候还会有一个检查,以确保CONFIG_SYS_V_IPC设置为n,为了规避这项检查,我们需要修改./system/libvintf/check_vintf.cpp中的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>int main() 
{int shmid;char *shmaddr;char message[] = "hello world";key_t key1 = ftok("/data/local/tmp/key/test_key", 1);// 创建共享内存段shmid = shmget(key1, sizeof(message), IPC_CREAT | 0666);if (shmid == -1) {perror("shmget");exit(1);}// 将共享内存连接到当前进程的地址空间shmaddr = (char *)shmat(shmid, NULL, 0);if (shmaddr == (char *)(-1)) {perror("shmat");exit(1);}// 将数据写入共享内存strcpy(shmaddr, message);printf("Message '%s' written to shared memory\n", message);// 分离共享内存shmdt(shmaddr);return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>int main() {int shmid;char *shmaddr;key_t key1 = ftok("/data/local/tmp/key/test_key", 1);// 获取共享内存段 12 is sizeof("hello world")shmid = shmget(key1, 12, 0666);if (shmid == -1) {perror("shmget");exit(1);}// 连接到共享内存段shmaddr = (char *)shmat(shmid, NULL, 0);if (shmaddr == (char *)(-1)) {perror("shmat");exit(1);}// 从共享内存读取数据并打印printf("Read from shared memory: %s\n", shmaddr);// 分离共享内存shmdt(shmaddr);// 删除共享内存段(在实际应用中,可能需要谨慎处理删除操作)shmctl(shmid, IPC_RMID, NULL);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker pull lss233/one-api:latest 在哪里运行,作用是什么

docker pull lss233/one-api:latest 在哪里运行,作用是什么 1. 在哪里运行? docker pull lss233/one-api:latest 是一个Docker命令,需在已安装Docker的环境中执行。 适用环境:本地开发机、服务器、云主机等。前提条件:需先安装Docker并配置好环境。2. 作用是什么? 该命令…

轮胎厂相关笔记

一、术语 图解&#xff1a;https://news.yiche.com/hao/wenzhang/38498703/ 1、胚胎 在轮胎制造行业中&#xff0c;“胎胚”&#xff08;也称“生胎”或“未硫化轮胎”&#xff09;是指轮胎在硫化&#xff08;高温高压固化&#xff09;之前的半成品形态。它是轮胎成型的中间…

开发者视角:应用程序中HTTP代理的集成指南

目录 一、为何需要HTTP代理&#xff1f; 二、集成方式分阶解析 三、关键配置管理策略 四、安全与性能平衡 五、调试与问题排查 六、最佳实践总结 结语 在开发需要与外部网络交互的应用程序时&#xff0c;HTTP代理是绕不开的实用工具。它既能解决网络限制问题&#xff0c…

从纸质到 AI 时代:我的笔记工具探索之旅

今天清晨&#xff0c;在得到上闲逛时&#xff0c;偶然间发现了一本名为《笔记的方法》的书&#xff0c;这本由Flomo的作者出版的图书&#xff0c;深入探讨了记笔记的艺术。 说起记笔记&#xff0c;这些年来&#xff0c;我尝试了各种各样的工具&#xff0c;今天就来梳理一下我的…

Ubuntu22云服务器添加2G Swap分区

Ubuntu22云服务器添加2G Swap分区 步骤 1&#xff1a;检查当前 Swap 和内存步骤 2&#xff1a;创建 2GB 的 Swap 文件步骤 3&#xff1a;设置权限并格式化步骤 4&#xff1a;启用 Swap 文件步骤 5&#xff1a;永久保留 Swap 配置可选优化&#xff1a;调整 Swappiness验证结果注…

网络空间安全(43)Linux实战篇

一、系统配置安全 BIOS安全设置 设置BIOS密码&#xff1a;防止未授权用户修改BIOS设置。修改引导次序&#xff1a;禁止从软盘启动系统&#xff0c;减少潜在的启动攻击风险。 文件系统权限管理 最小化SUID权限程序&#xff1a;SUID&#xff08;Set User ID&#xff09;程序以ro…

软件的常用设计模式。可参考一个一个学习

以下是软件设计中常见的 **23种经典设计模式**&#xff08;基于《设计模式&#xff1a;可复用面向对象软件的基础》GoF 的经典分类&#xff09;&#xff0c;并结合 **Python 语言特性**的简要说明和典型应用场景。我将它们分为 **创建型、结构型、行为型** 三大类&#xff0c;供…

性能比拼: Go(Gin) vs Python(Flask)

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs Python Performance Benchmark (Kubernetes - OpenTelemetry - Prometheus - S3/Postgres) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中&#xff0c;我们将比较 Golang 和 Python 的性能。 但…

Android版本更新服务通知下载实现

在日常开发中&#xff0c;我们肯定会有检查版本更新的需求&#xff0c;那我版本更新的轮子网上也是有的&#xff0c;想自己实现一下代码如下&#xff1a; 下载管理类&#xff1a; public class DownLoadManager {private static final String MAIN "main"; //Tagp…

UE5学习笔记 FPS游戏制作33 换子弹 动画事件

新建动画蒙太奇 为Rifle和Launcher各自新建一个动画蒙太奇&#xff0c;拖入动画&#xff0c;注意动画的轨道要和动画蓝图里的一致 在蒙太奇添加动画事件 在通知一栏新增一个轨道&#xff0c;右键轨道&#xff0c;新增一个 换枪完成 通知&#xff0c;不同动画的同名通知需要…

uniapp中uploadFile的用法

基本语法 uni.uploadFile(OBJECT)OBJECT 是一个包含上传相关配置的对象&#xff0c;常见参数如下&#xff1a; 参数类型必填说明urlString是开发者服务器地址。filePathString是要上传文件资源的本地路径。nameString是文件对应的 key&#xff0c;开发者在服务端可以通过这个 …

Android设计模式之责任链模式

一、定义&#xff1a; 使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系将这些对象连城一条链&#xff0c;并沿着这条链传递该请求&#xff0c;只到有对象处理它为止。 二、模式结构&#xff1a; 抽象处理者&#xff08;Handler&#xff…

Oracle数据库数据编程SQL<3.3 PL/SQL 游标>

游标(Cursor)是Oracle数据库中用于处理查询结果集的重要机制&#xff0c;它允许开发者逐行处理SQL语句返回的数据。 目录 一、游标基本概念 1. 游标定义 2. 游标分类 二、静态游标 &#xff08;一&#xff09;显式游标 【一】不带参数&#xff0c;普通的显示游标 1. 显式…

逗万DareWorks|创意重构书写美学,引领新潮无界的文创革命

当传统文具陷入同质化泥潭时&#xff0c;逗万DareWorks品牌犹如一颗璀璨的明星&#xff0c;以其独特的创意理念和卓越的产品品质&#xff0c;迅速赢得了广大消费者的青睐。 逗万DareWorks隶属于东莞司贸文教赠品有限公司&#xff0c;后者深耕制笔行业45年&#xff0c;占地4.6万…

写Prompt的技巧和基本原则

一.基本原则 1.一定要描述清晰你需要大模型做的事情&#xff0c;不要模棱两可 2.告诉大模型需要它做什么&#xff0c;不需要做什么 改写前: 请帮我推荐一些电影 改写后: 请帮我推荐2025年新出的10部评分比较高的喜剧电影&#xff0c;不要问我个人喜好等其他问题&#xff…

【React】基于 React+Tailwind 的 EmojiPicker 选择器组件

1.背景 React 写一个 EmojiPicker 组件&#xff0c;基于 emoji-mart 组件二次封装。支持添加自定义背景 、Emoji 图标选择&#xff01;并在页面上展示&#xff01; 2.技术栈 emoji-mart/data 、emoji-mart : emoji 图标库、元数据 tailwindcss: 原子化 CSS 样式库 antd : 组…

Qt中绘制不规则控件

在Qt中绘制不规则控件可通过设置遮罩&#xff08;Mask&#xff09;实现。以下是详细步骤: ‌继承目标控件‌&#xff1a;如QPushButton或QWidget。‌重写resizeEvent‌&#xff1a;当控件大小变化时&#xff0c;更新遮罩形状。‌创建遮罩区域‌&#xff1a;使用QRegion或QPain…

Parallel_Scheduling_of_DAGs_under_Memory_Constraints论文阅读

内存约束下的 DAG 并行调度 点击阅读原文语雀链接更清晰 摘要 科学工作流通常被建模为任务的有向无环图&#xff08;DAG&#xff09;&#xff0c;这些任务代表计算模块及其依赖关系&#xff0c;依赖关系表现为任务生成的数据被其他任务使用。这种形式化方法允许使用运行时系统&…

探索MVC、MVP、MVVM和DDD架构在不同编程语言中的实现差异

MVC与MVP/MVVM/DDD架构对比&#xff0c;不同语言实现 MVC 分层架构设计概述 模型-视图-控制器&#xff08;Model-View-Controller&#xff0c;简称 MVC&#xff09;是一种经典软件架构设计&#xff0c;通过分层解耦&#xff0c;使得系统结构清晰和易于维护&#xff0c;具有良…

一文读懂 UML:基础概念与体系框架

UML 图是一种标准化的建模语言&#xff0c;在软件开发和系统设计等领域有着广泛的应用。以下是对 UML 图各类图的详细介绍&#xff1a; 1.用例图 定义&#xff1a;用例图是从用户角度描述系统功能的模型图&#xff0c;展现了系统的参与者与用例之间的关系。作用&#xff1a;帮…