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.pswp.cn/pingmian/74152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/74152.shtml
英文地址,請注明出處:http://en.pswp.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;幫…