property_init函数中只是简单的调用了init_property_area方法,接下来我们看一下这个方法的具体实现:
- static int property_area_inited = 0; static workspace pa_workspace;
- static int init_property_area(void) {
- // 属性空间是否已经初始化 if (property_area_inited)
- return -1;
- if (__system_property_area_init()) return -1;
- if (init_workspace(&pa_workspace, 0))
- return -1;
- fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC);
- property_area_inited = 1; return 0;
- }
从init_property_area函数,我们可以看出,函数首先判断属性内存区域是否已经初始化过,如果已经初始化,则返回-1。如果没有初始化,我们接下来会发现有两个关键函数__system_property_area_init和init_workspace应该是跟内存区域初始化相关。那我们分别分析一下这两个函数具体实现。
- __system_property_area_init
- __system_property_area_init函数位于/bionic/libc/bionic/system_properties.c文件中,具体代码实现如下:
- struct prop_area { unsigned bytes_used;
- unsigned volatile serial; unsigned magic;
- unsigned version; unsigned reserved[28];
- char data[0]; };
- typedef struct prop_area prop_area; prop_area *__system_property_area__ = NULL;










