Android启动流程分析(五) init.rc的读取
来源:互联网 发布:excel 重复数据统计 编辑:程序博客网 时间:2024/05/29 15:55
#############################################
本文为极度寒冰原创,转载请注明出处
#############################################
在前面一篇中,分析了在init的main函数中,会去解析init.rc。那么解析的过程是怎么样的呢?
init.rc的解析函数为:init_parse_config_file.
实现的位置在于:init_parse.c
int init_parse_config_file(const char *fn){ char *data; data = read_file(fn, 0); if (!data) return -1; parse_config(fn, data); DUMP(); return 0;}这个函数分为了两个部分:
首先是read_file, 其次是parse_config.
我们先来看看read_file的实现:
150void *read_file(const char *fn, unsigned *_sz)151{152 char *data;153 int sz;154 int fd;155 struct stat sb;156157 data = 0;158 fd = open(fn, O_RDONLY); // 打开fn的文件,即打开了init.rc159 if(fd < 0) return 0; // 如果打开失败,则返回0160161 // for security reasons, disallow world-writable162 // or group-writable files163 if (fstat(fd, &sb) < 0) { // 得到fd文件描述符所指向文件的文件信息,并填充sb的状态结构体。如果获取失败的话,会返回-1164 ERROR("fstat failed for '%s'\n", fn);165 goto oops;166 }167 if ((sb.st_mode & (S_IWGRP | S_IWOTH)) != 0) { // 如果其他用户,或者用户组有可以写入这个文件的权限的话,则error168 ERROR("skipping insecure file '%s'\n", fn);169 goto oops;170 }171172 sz = lseek(fd, 0, SEEK_END); // 遍历fd文件的长度173 if(sz < 0) goto oops; // 如果得不到当前的长度的话,返回错误174175 if(lseek(fd, 0, SEEK_SET) != 0) goto oops; 176177 data = (char*) malloc(sz + 2); // malloc一个指针,长度为当前文件长度+2178 if(data == 0) goto oops; // 如果data没有malloc成功的话,则返回错误。179180 if(read(fd, data, sz) != sz) goto oops; //从文件fd中,读取sz的内容,保存到data的数组中181 close(fd); // 读取完了文件,则要关闭这个文件的描述符182 data[sz] = '\n'; 183 data[sz+1] = 0; //将data给填充,即数组最后为0即EOF184 if(_sz) *_sz = sz; // if(0), 暂时不考虑185 return data; // return data186187oops:188 close(fd);189 if(data != 0) free(data);190 return 0;191}由上面的分析,我们可以得知,在readfile的时候,将init.rc内容全部读取到了data的数组中,并进行了返回。
结合前面的init_parse_file_config可以看到,
data = read_file(fn, 0);目前的data数组中,保存的就是从文件中读取出来的全部内容。
这个内容就被传入到了parse_config中进行解析。
parse_config(fn, data);
那么parse_config是如何解析的呢?
想要理解这个过程,那我们就要首先看看那init.rc这个文件了。
0 0
- Android启动流程分析(五) init.rc的读取
- Android启动流程分析(六) init.rc的语法
- Android启动流程分析(七) init.rc的解析
- Android启动流程分析(八) 解析init.rc的action
- Android启动流程分析(九) 解析init.rc的service
- Android 启动分析 init进程 init.rc
- Android启动流程--学会使用init.rc
- android系统启动流程启动画面学习之init和init.rc分析
- android系统启动流程启动画面学习之init和init.rc分析
- Android启动脚本init.rc分析
- android系統启動流程启動畫面學習之init和init.rc分析
- Android系统启动流程分析init.c和init.rc文件
- Android中init.rc文件的解析&&Android init进程启动过程分析
- Android 启动分析-init进程&init.rc
- Android 启动分析-init进程&init.rc[转]
- android—init.rc的读取
- android init.rc 分析
- android init.rc 分析
- 滑动关闭实现
- CardView和SeekBar使用
- 【j2ee spring】8、整合SSH框架(1)
- zoj 3197 Google Book 【区间覆盖】
- POJ 1226 Substrings
- Android启动流程分析(五) init.rc的读取
- Thinkphp Nginx下的配置
- 【XShell】XShell中中文显示乱码解决方法
- 模拟登陆校园网 图个省事方便
- Sicily 1305. Who’s Winner?
- 个人作业
- 2015.03.28 leetcode LRU cache 解题记录
- Linux ssh常用命令
- JS 自定义代码库(持续更新)