这个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是获得。