Android培训班(39)

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

init.rc文件里,可以看到加载下面的服务:

service installd /system/bin/installd

socket installd stream 600 system system

installd 服务的代码在目录:

Android-2.0/frameworks/base/cmds/installd

 

installd服务是提供安装dex文件的服务。

它的主要入口函数代码如下:

int main(const int argc, const char *argv[]) {

char buf[BUFFER_MAX];

struct sockaddr addr;

socklen_t alen;

int lsocket, s, count;

 

创建一个控制的SOCKET。

lsocket = android_get_control_socket(SOCKET_PATH);

if (lsocket < 0) {

LOGE("Failed to get socket from environment: %s/n", strerror(errno));

exit(1);

}

 

监听这个SOCKET。

if (listen(lsocket, 5)) {

LOGE("Listen on socket failed: %s/n", strerror(errno));

exit(1);

}

fcntl(lsocket, F_SETFD, FD_CLOEXEC);

 

循环里处理接收到的SOCKET连接。

 

for (;;) {

alen = sizeof(addr);

s = accept(lsocket, &addr, &alen);

if (s < 0) {

LOGE("Accept failed: %s/n", strerror(errno));

continue;

}

fcntl(s, F_SETFD, FD_CLOEXEC);

 

从新连接里接收到命令并处理。

LOGI("new connection/n");

for (;;) {

unsigned short count;

if (readx(s, &count, sizeof(count))) {

LOGE("failed to read size/n");

break;

}

if ((count < 1) || (count >= BUFFER_MAX)) {

LOGE("invalid size %d/n", count);

break;

}

if (readx(s, buf, count)) {

LOGE("failed to read command/n");

break;

}

buf[count] = 0;

if (execute(s, buf)) break;

}

LOGI("closing connection/n");

close(s);

}

 

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值