一般 c program 可以用 property_set, property_get 來設定/取得 property 值。
property related function 實做在 system/core/libcutils/propertied.c
基本上就是用 local socket 跟 PROP_SERVICE_NAME 溝通。
property service 好像是在 init 就啟動了..
void start_property_service(void)
{
int fd;
load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
load_properties_from_file(PROP_PATH_LOCAL_OVERRIDE);
/* Read persistent properties after all default values have been loaded. */
load_persistent_properties();
fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM, 0666, 0, 0);
if(fd < 0) return;
fcntl(fd, F_SETFD, FD_CLOEXEC);
fcntl(fd, F_SETFL, O_NONBLOCK);
listen(fd, 8);
property_set_fd = fd;
}
core/init 這個 process 最後,好像就是在做 property_service.. main() 的最後:
for(;;) {
...
...
nr = poll(ufds, fd_count, timeout);
if (nr <= 0)
continue;
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
}
ufds 就是剛剛 create_socket(PROP_SERVICE_NAME...) 的 fd這個 source file : core/init/property_service.c 有所有 property 的操作。
像:
persistant property value (以 persistant. 開頭的 property)存放方式,位置:
#define PERSISTENT_PROPERTY_DIR "/data/property"
沒有留言:
張貼留言