mprop.cpp

mprop.cpp

https://github.com/TangGee/mprop/blob/master/mprop.cpp

 

复制代码
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>

#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
#include <sys/_system_properties.h>
#include <sys/system_properties.h>

struct prop_info;
struct prop_area;

extern int __system_property_area_init();
extern int __system_property_get(const char *name, char *value);
extern int __system_property_add(const char *name, unsigned int namelen,
                          const char *value, unsigned int valuelen);
extern const prop_info *__system_property_find(const char *name);

extern prop_area *__system_property_area__;
extern int __system_property_update(prop_info *pi, const char *value, unsigned int len);

void usage() {
    printf("usage: mprop property_name  property_value\n");
}


int main(int argc,char **argv){
   sleep(30);
   printf("start....\n");
   const int fd = open("/dev/__properties__",
                       O_RDWR | O_NOFOLLOW | O_CLOEXEC | O_EXCL, 0444);

   if (argc!=3) {
       usage();
       return -1;
   }

   if (strlen(argv[1])+1>PROP_NAME_MAX) {
       printf("property name is to long\n");
       return -1;
   }

   if (sizeof(argv[2])+1>PROP_VALUE_MAX) {
       printf("property value is to long\n");
       return -1;
   }

   if (fd<0) {
      perror("open");
       return -1;
   }

   struct stat fd_stat;
   if (fstat(fd, &fd_stat) <0) {
       perror("fstat");
       return -1;
   }

   if (!S_ISREG(fd_stat.st_mode)) {
       printf("internal error\n");
       return -1;
   }

    void *memory_area = mmap(NULL, fd_stat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    __system_property_area__ = (prop_area *)memory_area;
    
    printf("mapd...\n");
    char value[PROP_VALUE_MAX];
    bool update = true;
    if(__system_property_get(argv[1],value)<=0) {
        update = false;
        printf("update falsei\n");
    }

    if (update) {
        printf("old value : %s\n",value);


        prop_info *pinfo = const_cast<prop_info *>(__system_property_find(argv[1]));
        if (!pinfo){
            printf("internal error\n");
            return -1;
        }
        if(__system_property_update(pinfo,argv[2],strlen(argv[2]))) {
            printf("update error\n");
            return -1;
        }

    } else {
        printf("add value: name:%s   value:%s\n",argv[1],argv[2]);
        if(__system_property_add(argv[1],strlen(argv[1]),argv[2],strlen(argv[2]))) {
            printf("update error\n");
            return -1;
        }
    }

    printf("new value %s\n",argv[2]);
    return 0;

}

复制代码

 

https://github.com/TangGee/mprop/blob/master/build.sh

export CC=i686-linux-android-clang
export CXX=i686-linux-android-clang++

PWD=`pwd`

$CXX mprop.cpp -o mprop -static  -l$PWD/x86_M/libc.a -l$PWD/x86_M/libdl.a

 

========== End

 

posted @   lsgxeva  阅读(290)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2018-08-14 Oracle-RAC原理
2018-08-14 ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
2018-08-14 Oracle与Sql server的区别
2018-08-14 Oracle数据库中心双活之道:ASM vs VPLEX
2018-08-14 使用Visual C ++和Open Folder自定义环境
2018-08-14 vscode Variables Reference
点击右上角即可分享
微信分享提示