系统的配置
? ?這個Android平臺保存系統的配置使用一個簡單的鍵值對。Bionic提供了一套函數來使用原始的應用程序來詢問這個系統配置。為了使用這些函數,這個系統的頭文件應該被加入。
#include<sys/system_properties.h>
? 這個系統的配置頭文件定義了這需要的結構和函數。每個系統配置有一個最大額PROP_NAME_MAX字符長名字對于這配置和PROP_VALUE_MAX字符長值。
? ?通過名稱獲得一個系統的配置值
? 這個_system_property_get函數能夠被用來尋找一個系統的配置通過名字。
? ? ? ?int_system_property_get(const char*name,char* value);
? 如下,它將拷貝這非空的終止特征值到這提供的值得指針和返回這個值得大小。這總共的自己拷貝不會比PROP_VALUE_MAX更大。
? ?char value[PROP_VALUE_MAX];
/* Gets the product model system property. */
if (0 == __system_property_get("ro.product.model", value))
{
/* System property is not found or it has an empty value. */
}
{
MY_LOG_INFO("product model: %s", value);
這個_stystem_property_find函數能夠被用來得到一個直接的指針對于這個系統的配置。
它通過名字尋找系統的配置和返回一個指針如果誒找到。否則,它將返回NULL。這個需要的指針在其生命周期仍舊是有效的,和它能夠被緩存的來防止未來的尋找。如下,這個_system_property_read函數被用來獲得它的特征值從這個指針。
??const prop_info* property;
/* Gets the product model system property. */
property = __system_property_find("ro.product.model");
if (NULL == property)
{
/* System property is not found. */
}
else
{
char name[PROP_NAME_MAX];
char value[PROP_VALUE_MAX];
/* Get the system property name and value. */
if (0 == __system_property_read(property, name, value))
Download at http://www.pin5i.com/
175 CHAPTER 6: Bionic API Primer
{
MY_LOG_INFO("%s is empty.");
}
else
{
MY_LOG_INFO("%s: %s", name, value);
}
}
用戶和組
這個Linux內核被設計是用于多用戶的。盡管Andoid被用作一個簡單的聽筒用戶,但是它仍舊利用基于用戶權限模式的優勢。
? ?通過基于用戶的權限模式,Android很容易保護系統通過阻止應用程序獲得其他的應用程序的數據和內存。
? ?服務和硬件資源也被保護通過基于用戶的權限模式。每個資源有他自己保護組。在應用程序開發期間,這應用程序需要獲得這些資源。這應用程序不被允許獲得任何額外的資源如果它不是特定資源的組的成員。
? 為了使用相關的函數,應該包含#include<unistd.h>
獲得這應用程序的用戶和組ID:
每一個安裝的應用程序的用戶和組Id是從10000開始的。這較低的ID被用于系統服務。這用戶ID對于目前的應用程序能夠通過這getuid來獲得,如下:
? ?uid_t uid;
/* Get the application user ID. */
uid = getuid();
MY_LOG_INFO("Application User ID is %u", uid);
與用戶ID相似,這組ID對于目前的應用程序能夠獲得通過getgid函數,如下:
? =getgid();通過getlogin來獲得用戶的名稱。
char* username;
/* Get the application user name. */
username = getlogin();
MY_LOG_INFO("Application user name is %s", username)
內部線程的通信:
? BIONIC并不提供IPC的支持,為了避免內核資源的泄露和denial-of-service。盡管不支持,但是Android平臺架構通過它自己特色很大程度使用了IPC作為BINDer。應用程序的通信和系統,服務和通過這Binder接口。在這些的時間,Bionic并不提供任何官方的APIs來使原生的應用程序和這Binder接口通信。目前,這Binder接口通過AndroidJavaAPI是獲得。
總結