apache apr介绍

APR(Apache portable Run-time librariesApache可移植运行库)的目的如其名称同样,主要为上层的应用程序提供一个能够跨越多操做系统平台使用的底层支持接口库。在早期 的Apache版本中,应用程序自己必须可以处理各类具体操做系统平台的细节,并针对不一样的平台调用不一样的处理函数。html

随着Apache的进一步开 发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。目前APR主要仍是由Apache使用,不过因为APR的较好的移植性,所以一些须要进行移植的C程序也开始使用APR,开源项目好比 Flood loader(http://httpd.apache.org/test/flood/,该项目用于服务器压力测试,不单单适用于Apache)FreeSwitch(www.freeswitch.org)JXTA-C(http://jxta-c.jxta.org,C版本的JXTA点对点平台实现);商业的项目则包括Blogline(http://www.bloglines.com/covalent(http://www.covalent.net)等等。apache

APR使得平台细节的处理进行下移。对于应用程序而言,它们根本就不须要考虑具体的平台,无论是UnixLinux仍是Window,应用程序执行的接口基本都是统一一致的。所以对于APR而言,可移植性和统一的上层接口是其考虑的一个重点。而APR最先的目的并非如此,它最先只是但愿将Apache中用到的全部代码合并为一个通用的代码库,然而这不是一个正确的策略,所以后来APR改变了其目标。有的时候使用公共代码并非一件好事,好比如何将一个请求映射到线程或者进程是平台相关的,所以仅仅一个公共的代码库并不能完成这种区分。APR的目标则是但愿安全合并全部的可以合并的代码而不须要牺牲性能。数组

APR的最先的一个目标就是为全部的平台(不是部分)提供一个公共的统一操做函数接口,这是一个很是了不得的目的,固然也是不现实的一个目标。咱们不可能支持全部平台的全部特征,所以APR目前只能为大多数平台提供全部的APR特性支持,包括Win32OS/2BeOSDarwinLinux等等。为了可以实现这个目标,APR开发者必须为那些不能运行于全部平台的特性建立了一系列的特征宏(FEATURE MACROS)以在各个平台之间区分这些特征。这些特征宏定义很是简单,一般用APR_HAS_FEATURE参数设置:安全

若是某个平台具备这个特性,则该宏必须设置为true,好比Linuxwindow都具备内存映射文件,同时APR提供了内存映射文件的操做接口,所以在这两个平台上,APR_HAS_MMAP宏必须设置,同时ap_mmap_*函数应该将磁盘文件映射为内存并返回适当的状态码。若是你的操做系统并不支持内存映射,那么APR_HAS_MMAP必须设置为0,并且全部的ap_mmap_*函数也能够不须要定义。第二步就是对于那些在程序中使用了不支持的函数必须提出警告。服务器

目前APR中支持的基本类型包括下面几种:网络

3-1 APR中支持的基本类型并发

类型名称dom

文件夹名称函数

描述性能

atomic

/apr/atomic

原子操做

dso

/apr/dso

动态加载共享库

file io

/apr/file_io

文件IO处理

mmap

/apr/mmap

内存映射文件

locks

/apr/locks

进程和线程互斥锁

memory

/apr/memory

内存池操做

network_io

/apr/network_io

网络IO处理

poll

/apr/poll

轮询IO

table

/apr/tables

Apache数组(堆栈)和表格以及哈希表

process

/apr/threadproc

进程和线程操做

user

/apr/user

用户和用户组操做

time

/apr/time

时间操做

string

/apr/strings

字符串操做

password

/apr/passwd

终端密码处理

misc

/apr/misc

大杂烩,不属于其他类的任何apr类型均可以放在里面

shmem

/apr/shmem

共享内存

random

/apr/random

随机数生成库

       
  apache 的apr项目目前有三部分组成,分别是apr、apr-util、apr-iconv
apr中包含了一些通用的开发组件,包括mmap,DSO等等
apr-util该目录中也是包含了一些经常使用的开发组件。这些组件与apr目录下的相比,它们与apache的关系更加密切一些。好比存储段和存储段组,加密等等。
apr-iconv包中的文件主要用于实现iconv编码。目前的大部分编码转换过程都是与本地编码相关的。在进行转换以前必须可以正确地设置本地编码。所以假如两个非本地编码A和B须要转换,则转换过程大体为A->Local以及Local->B或者B->Local以及Local->A。
以上三个包最新下载地址为:

http://labs.mop.com/apache-mirror//apr/apr-1.4.6.tar.gz
http://labs.mop.com/apache-mirror//apr/apr-util-1.4.1.tar.gz
http://labs.mop.com/apache-mirror//apr/apr-iconv-1.2.1.tar.gz

关于apr的安装和参数设置,请参看 http://www.361way.com/manapache/install.html 
相关文章
相关标签/搜索