android裡面許可權控制的比較嚴,一般的應用當需要使用系統或者root許可權是,比較麻煩,所以編寫乙個root service用來處理root許可權請求,通過socket通訊
[cpp]view plain
copy
print?
/* 標準標頭檔案放在前面,否則有些函式定義會被覆蓋掉 */
#include
#include
#include
#include
#include
#define log_tag "root_server"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "mjson.h"
#include
#include
#define server_name "@server_root_permission_socket"
#define max_param_num 10
typedef
enum
e_root_call_type
; static
inline
long
long
current_time_millis()
/* 檢測狀態,timeout單位ms, timeout=-1表示無限等待 */
intmain(
intargc,
char
**argv)
//set server addr_param
struct
sockaddr_un server_addr;
server_addr.sun_family = af_unix;
strncpy(server_addr.sun_path, server_name, sizeof
(server_addr.sun_path) - 1);
ret = bind(server_sockfd,(struct
sockaddr*)&server_addr,
sizeof
(server_addr));
if(ret == -1)
//listen the server
listen(server_sockfd, 5);
client_sockfd = -1;
memset(&client_addr,0,sizeof
(struct
sockaddr_un));
client_len = sizeof
(client_addr);
sleep(1);
fd_set(server_sockfd, &read_fds);
max = server_sockfd;
mjson_init();
while
(1)
else
if(!ret)
continue
;
logi("ret select-------------"
);
if((client_sockfd = accept(server_sockfd,(
struct
sockaddr*)&client_addr, &client_len)) < 0)
logi("client_sockfd = %d"
, client_sockfd);
//read data from client socket
nread = read( client_sockfd, ¶m_len, 4);
if(nread != 0)
logi("param_len = %d"
, param_len);
nread = read( client_sockfd, buffer, param_len);
if(nread != 0)
logi("nread = %d"
, nread);
logi("buffer = %s"
, buffer);
json = buffer;
if(mjson_parse(&root, (
char
*) json) != 0)
if(mjson_try_begin() < 0)
q = root;
type =(e_root_call_type) mjson_locate_number(q, "call_type"
);
logi("call_type = %d"
, type);
if(root_system_call == type)
} else
if(root_system_exe == type)
if(0 == pid)
switch
(param_num)
if(ret < 0)
} else
logi( "waitpid out pid:%d"
, pid);
} }
} ret = write(client_sockfd, &ret, 4);
logi("ret = %d"
, ret);
bail:
close(client_sockfd);
mjson_try_end();
} return
0;
}
以json方式傳遞資料,server解析
client 乙個例子:
[cpp]view plain
copy
print?
define server_name
"@server_root_permission_socket"
static
inline
long
long
current_time_millis()
intdo_root_call(
char
*json)
struct
sockaddr_un address;
address.sun_family = af_unix;
strcpy(address.sun_path, server_name);
ret = connect(sockfd, (struct
sockaddr *)&address,
sizeof
(address));
if(ret == -1)
porting_info(port_module_base,"sockfd = %d"
, sockfd);
porting_info(port_module_base,"result = %d"
, ret);
len = strlen(json);
ret = write(sockfd, &len, 4);
porting_info(port_module_base,"ret2 = %d"
, ret);
porting_info(port_module_base,"json = %s"
, json);
ret = write(sockfd, json, strlen(json));
porting_info(port_module_base,"ret3 = %d"
, ret);
read( sockfd, &ret, 4);
porting_info(port_module_base,"ret4 = %d"
, ret);
close(sockfd);
sockfd = -1;
porting_info(port_module_base," client ok"
);
return
0;
}
Android中與JSON相關的應用
json的定義 一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案 有點類似於正規表示式 獲得了當今大部分語言的支援 從而可以在不同平台間進行資料交換。json採用相容性很高的文字格式,同時也具備類似於c語言體系的行為。json.org json的結構...
Android中與JSON相關的應用
json的定義 一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案 有點類似於正規表示式 獲得了當今大部分語言的支援 從而可以在不同平台間進行資料交換。json採用相容性很高的文字格式,同時也具備類似於c語言體系的行為。json.org json的結構...
json在php和ajax中應用
馬永佔,myz,mayongzhan json是啥.應該是一種儲存的格式吧.最強的是這種格式可以被js直接當成物件讀 php中有json encode arr 還有json decode str,assoc 其中assoc為true則返回陣列而不是物件 很簡單的用法 手冊中的例子 arr array...