×

property_get per oper

android property 怎么单独编译?谁给我一个PLSQL Developer 注册码

admin admin 发表于2022-05-16 16:53:49 浏览114 评论0

抢沙发发表评论

android property 怎么单独编译


1. property应用例子
Java:
import Android.os.SystemProperties;
SystemProperties.get(“persist.sys.usb.config“, “mtp,adb“);
SystemProperties.getBoolean(“ro.adb.secure“, false);
SystemProperties.set(“sys.usb.config“, config);
SystemProperties.set需要有system权限,可以这么做
a. 在android.mk中,加上LOCAL_CERTIFICATE :=platform
b. 在AndroidManifest.xml中,加上android:sharedUserId=“android.uid.system“

Native C:
#include 《cutils/properties.h》
LOCAL_SHARED_LIBRARIES := \
libcutils

int property_set(const char *key, const char *value)
int property_get(const char *key, char *value, const char *default_value)
property_set(“service.adb.root“, “1“);
property_get(“ro.debuggable“, value, ““)

2. 设置属性的调用过程
SystemProperties.set in Java
set frameworks/base/core/java/android/os/SystemProperties.java
native_set(key, val)
SystemProperties_set frameworks/base/core/jni/android_os_SystemProperties.cpp
property_set /system/core/libcutils/properties.c

setprop in .rc/.sh file
setprop_main system/core/toolbox/setprop.c
property_set /system/core/libcutils/properties.c

property_set /system/core/libcutils/properties.c
HAVE_LIBC_SYSTEM_PROPERTIES #define HAVE_LIBC_SYSTEM_PROPERTIES 1 in build/core/combo/include/arch/Linux-arm/AndroidConfig.h
__system_property_set bionic/libc/bionic/system_properties.c
send_prop_msg(PROP_MSG_SETPROP)
handle_property_set_onfd(case PROP_MSG_SETPROP) system/core/init/property_service.c
检查权限
if “ctl.“ 开头 handle_control_message() system/core/init/init.c
ctrl.start msg_start() 启动service
ctrl.stop msg_stop() 停止service
ctrl.restart msg_restart() 重启service
else property_set()
如果能找到且以ro开头,就返回-1;能找到且不以ro开头调用 __system_property_update()
如果找不到则调用__system_property_add()
如果是“net.“开头,调用property_set(“net.change“, name)
如果以“persist.“开头,调用write_persistent_property();
property_changed(name, value);
除了“persist.“开头的property,关机后值会消失;以“persist.“开头的会保存在/data/property目录下一文件里,可以看write_persistent_property()

3. 属性的初始值
从下面一些文件可以得到属性的初始值
void start_property_service(void)
{
...
load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
load_override_properties();
/* Read persistent properties after all default values have been loaded. */
load_persistent_properties();
...
#define PROP_PATH_RAMDISK_DEFAULT “/default.prop“
#define PROP_PATH_SYSTEM_BUILD “/system/build.prop“
#define PROP_PATH_SYSTEM_DEFAULT “/system/default.prop“
#define PROP_PATH_LOCAL_OVERRIDE “/data/local.prop“

4. 属性的权限
如果是serice, 调用check_control_perms()检查权限,可以看看control_perms
如果是其他属性,调用check_perms()检查权限,可以看看property_perms

5. property_changed() system/core/init/init.c
void property_changed(const char *name, const char *value)
{
if (property_triggers_enabled)
queue_property_triggers(name, value);
}

queue_property_triggers()
action_add_queue_tail(act)

设置完属性后,会调用on property相应的action, 可以看看init.rc

谁给我一个PLSQL Developer 注册码


直接下载绿色版的

密码:myuf

PLSQL Developer 11.0.0.1762 中文绿色注册版(免Oracle11g客户端)

免安装Oracle客户端,绿色无公害。

说明:

1、点击 “启动PLSQL.exe“ 即可免装oracle使用PLSQL  或者 使用qidong.bat启动 ;

2、instantclient_11_2为oracle 11 绿色精简版;

3、设置TNS,用记事本打开配置:instantclient_11_2\tnsnames.ora

qidong.bat内容:

set oracle_home=%~dp0\instantclient_11_2

set TNS_ADMIN=%~dp0\instantclient_11_2

set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

set.GBK

start PLSQLDev.exe

作用:设置临时变量,启动plsql 


如何使用Curator监听zookeeper事件变化


掌握zookeeper事件监听机制,非常重要,可以说是跨入了进阶的门槛,只有掌握了如何监听某个节点或路径,我们才能在节点变化后,做一些我们想做的事,包括:
1,配置文件同步
2,主从切换
3,分布式队列
4,分布式锁
5,其他

散仙,在以前的文章里面有写过使用zookeeper原生的api,监听zk节点变化,那么本篇我们就来看下,如何使用curator来完成监听,代码如下:
《pre name=“code“ class=“java“》package com.qin.curator.zk;

import javax.sound.midi.Patch;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.CuratorFrameworkFactory.Builder;
import org.apache.curator.framework.api.CuratorWatcher;
import org.apache.curator.framework.recipes.cache.NodeCache;
import org.apache.curator.framework.recipes.cache.NodeCacheListener;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.ZKPaths;
import org.apache.zookeeper.WatchedEvent;
/**
*
* 使用curator监听zookeeper节点
* @author qindongliang
* **/
public class CuratorWatch {

static CuratorFramework zkclient=null;
static String nameSpace=“php“;
static {

String zkhost=“192.168.46.22:2181“;//zk的host
RetryPolicy rp=new ExponentialBackoffRetry(1000, 3);//重试机制
Builder builder = CuratorFrameworkFactory.builder().connectString(zkhost)
.connectionTimeoutMs(5000)
.sessionTimeoutMs(5000)
.retryPolicy(rp);
builder.namespace(nameSpace);
CuratorFramework zclient = builder.build();
zkclient=zclient;
zkclient.start();// 放在这前面执行
zkclient.newNamespaceAwareEnsurePath(nameSpace);

}

public static void main(String args) throws Exception{

watch();
Thread.sleep(Long.MAX_VALUE);

}

/**
*
* 监听节点变化
*
* */
public static void watch()throws Exception{
PathChildrenCache cache = new PathChildrenCache(zkclient, “/zk“, false);
cache.start();

System.out.println(“监听开始/zk........“);
PathChildrenCacheListener plis=new PathChildrenCacheListener() {

@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event)
throws Exception {
switch ( event.getType() )
{
case CHILD_ADDED:
{
System.out.println(“Node added: “ + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}

case CHILD_UPDATED:
{
System.out.println(“Node changed: “ + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}

case CHILD_REMOVED:
{
System.out.println(“Node removed: “ + ZKPaths.getNodeFromPath(event.getData().getPath()));
break;
}
}

}
};
//注册监听
cache.getListenable().addListener(plis);

}

}
《/pre》

运行后的控制台打印:
《pre name=“code“ class=“java“》18:33:07.722 [main] INFO o.a.c.f.imps.CuratorFrameworkImpl - Starting
18:33:07.727 [main] DEBUG o.a.curator.CuratorZookeeperClient - Starting
18:33:07.727 [main] DEBUG org.apache.curator.ConnectionState - Starting
18:33:07.727 [main] DEBUG org.apache.curator.ConnectionState - reset
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:host.name=QINDONGLIANG.dhgatecn.msf
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.version=1.7.0_04
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.vendor=Oracle Corporation
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.home=D:\Java\jdk1.7.0_04\jre
18:33:07.734 [main] INFO org.apache.zookeeper.ZooKeeper - Client environment:java.class.path=D:\eclipseworkspace2yw\opzk\bin;D:\eclipseworkspace2yw\opzk\lib\curator-client-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-examples-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-framework-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-recipes-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-test-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-discovery-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-discovery-server-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\curator-x-rpc-2.6.0.jar;D:\eclipseworkspace2yw\opzk\lib\log4j-1.2.15.jar;D:\eclipseworkspace2yw\opzk\lib\zookeeper-3.4.5.jar;D:\eclipseworkspace2yw\opzk\lib\commons-io-2.1.jar
-oper