ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年12月7日 星期三

property_set/get in android

android 的 property 系統也是一種 IPC 的方法 (用在跟 system 溝通上).
一般 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"

沒有留言:

標籤

網誌存檔