Apache APR可移植运行库简介1-4
1.1 何为APR?
类型名称
|
文件夹名称
|
描述
|
atomic
|
/srclib/apr/atomic
|
原子操作
|
dso
|
/srclib/apr/dso
|
动态加载共享库
|
file io
|
/srclib/apr/file_io
|
文件IO处理
|
mmap
|
/srclib/apr/mmap
|
内存映射文件
|
locks
|
/srclib/apr/locks
|
进程和线程互斥锁
|
memory
|
/srclib/apr/memory
|
内存池操作
|
network_io
|
/srclib/apr/network_io
|
网络IO处理
|
poll
|
/srclib/apr/poll
|
轮询IO
|
table
|
/srclib/apr/tables
|
Apache数组(堆栈)和表格以及哈希表
|
process
|
/srclib/apr/threadproc
|
进程和线程操作
|
user
|
/srclib/apr/user
|
用户和用户组操作
|
time
|
/srclib/apr/time
|
时间操作
|
string
|
/srclib/apr/strings
|
字符串操作
|
password
|
/srclib/apr/passwd
|
终端密码处理
|
misc
|
/srclib/apr/misc
|
大杂烩,不属于其余类的任何apr类型都可以放在里面
|
shmem
|
/srclib/apr/shmem
|
共享内存
|
random
|
/srclib/apr/random
|
随机数生成库
|
原始版本
|
新版本
|
兼容性
|
原因
|
2.2.3
|
2.2.4
|
前后兼容
|
PATCH版本号的变化保持前向和后向兼容
|
2.2.3
|
2.2.1
|
前后兼容
|
PATCH版本号的变化保持前向和后向兼容
|
2.2.3
|
2.3.1
|
向前兼容
|
次版本号的变化保持向前兼容,但并不保持向后兼容
|
2.2.3
|
2.1.7
|
不兼容
|
次版本号的降低不能保证向后兼容
|
2.2.3
|
3.0.0
|
不兼容
|
主版本号的变化不保证兼容性
|
2.2.3
|
1.4.7
|
不兼容
|
主版本号的变化不保证兼容性
|
组件名称
|
文件夹名称
|
描述
|
buckets
|
/srclib/apr-util/buckets
|
存储段和存储段组
|
crypto
|
/srclib/apr-util/crypto
|
加密和解密
|
hooks
|
/srclib/apr-util/hooks
|
apache挂钩
|
dbd
|
/srclib/apr-util/dbd
|
数据库连接管理
|
dbm
|
/srclib/apr-util/dbm
|
|
ldap
|
/srclib/apr-util/ldap
|
轻量级目录访问协议
|
strmatch
|
/srclib/apr-util/strmatch
|
字符串匹配,包括普通字符串匹配以及正则表达式匹配,正则表达式匹配中使用prec库
|
uri
|
/srclib/apr-util/uri
|
uri操作例程
|
xml
|
/srclib/apr-util/xml
|
xml支持例程,其中使用expat作为xml解析器
|
xlate
|
/srclib/apr-util/xlate
|
i18n 转换库
|
encoding
|
/srclib/apr-util/encoding
|
编码转换库,其中实现了各种编码之间的转换
|
misc
|
/srclib/apr-util/misc
|
大杂烩
|
C:/work/apr/
C:/work/apr-iconv/
C:/work/apr-util/
1.4 应用APR
变量类型
|
硬件平台
|
|||||||
I686
|
I386
|
alpha
|
IA64
|
M68k
|
MIPS
|
Sparc
|
Spar64
|
|
apr_byte_t
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
apr_int16_t
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
apr_uint16_t
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
2
|
apr_int32_t
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
apr_uint32_t
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
4
|
apr_int64_t
|
4
|
4
|
8
|
8
|
4
|
4
|
4
|
4
|
apr_uint64_t
|
4
|
4
|
8
|
8
|
4
|
4
|
4
|
4
|
通用类型
|
含义
|
Win32类型
|
BEOS类型
|
UNIX
|
apr_os_file_t
|
文件类型
|
HANDLE
|
int
|
Int
|
apr_os_dir_t
|
目录类型
|
HANDLE
|
dir
|
DIR
|
apr_os_sock_t
|
套接字类型
|
SOCKET
|
int
|
int
|
apr_os_proc_mutex_t
|
进程互斥锁
|
HANDLE
|
apr_os_proc_mutex_t
|
pthread_mutex_t
|
apr_os_thread_t
|
线程类型
|
HANDLE
|
thread_id
|
pthread_t
|
apr_os_proc_t
|
进程类型
|
HANDLE
|
thread_id
|
pid_t
|
apr_os_threadkey_t
|
线程key类型
|
DWORD
|
int
|
pthread_key_t
|
apr_os_imp_time_t
|
FILETIME
|
struct timeval
|
struct timeval
|
|
apr_os_exp_time_t
|
SYSTEMTIME
|
struct tm
|
tm
|
|
apr_os_dso_handle_t
|
DSO加载
|
HANDLE
|
image_id
|
void*
|
apr_os_shm_t
|
共享内存
|
HANDLE
|
void*
|
void*
|
1) 、在固定地址上的分配,这意味着变量是在一个特殊的静态区域上创建的,而不是每次函数调用的时候在堆栈上动态创建的,这是static的静态存储的概念。
错误名称
|
含义
|
0
|
每个平台都有0,但是都没有实际的定义,0又的确是一个errno value的offset,但是它是“匿名的”,它不像EEXIST那样有着可以“自描述”的名字。
|
APR_OS_START_ERROR
|
该定义是平台相关的,不同平台的值可能不同,它定义了APR中所允许的错误码的起始偏移量,即20000,这意味着所有的错误码值不能低于20000。至于错误码,它可以是导致APR函数失败的任何原因。在这个范围内定义的所有错误码形式都必须是APR_E*格式,比如APR_ENOSTAT、APR_ENOSOCKET、APR_ENOPOOL。该类别中允许定义最多50000种错误码。
|
APR_OS_START_STATUS
|
该定义也是平台相关的,它定义了APR中所允许的返回状态值的起始偏移量,即APR_OS_START_ERROR + APR_OS_ERRSPACE_SIZE,即70000开始。不过需要注意的是,状态值并不能表示失败还是成功。如果要表示返回成功,必须使用APR_SUCCESS返回。在这个范围的状态码形式都必须是APR_*格式,比如APR_DETACH、APR_INCHILD。
|
APR_OS_START_USERERR
APR_OS_START_USEERR
|
该定义也是平台相关的。当用户使用APR库的时候,如果它希望定义APR返回码之外的其余的自定义返回码,那么这些返回码必须从APR_OS_START_USEERR开始,即APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE,即从120000开始。
|
APR_OS_START_CANONERR
|
APR_OS_START_CANONERR is where APR versions of errno values are defined on systems which don't have the corresponding errno.对于这类返回码的定义通常如下:
#ifdef EEXIST
#define APR_EEXIST EEXIST
#else
#define APR_EEXIST (APR_OS_START_CANONERR + 2)
#endif
|
APR_OS_START_EAIERR
|
在使用socket编程的时候如果调用getaddrinfo()函数,该函数会返回一系列的以EAI_*开始的错误码,比如EAI_AGAIN,EAI_FAIL等等。这些不规则的错误码最终都要转换为APR中对应的返回码。这些转换码从APR_OS_START_EAIERR开始,最多允许50000个(当然事实上肯定没有这么多)。
|
APR_OS_START_SYSERR
|
由于APR必须保持跨平台的特性,因此不同的操作系统平台肯定有自己所独有的一些返回码,这些返回码不具有移植性,是与平台相关的。尽管如此,他们也必须转换为APR内部返回码。APR_OS_START_SYSERR指定了定义这些不具有移植性返回码的起始偏移,为720000,容量为50000。
|
错误名称
|
含义
|
值
|
APR_ENOSTAT
|
APR无法对一个文件执行stat操作
|
20001
|
APR_ENOPOOL
|
APR没有提供内存池来执行内存分配操作
|
20002
|
APR_EBADDATE
|
APR给出了一个无效的日期
|
20003
|
APR_EINVALSOCK
|
APR给出了一个无效的socket
|
20004
|
APR_ENOPROC
|
APR没有给定一个进程的结构
|
20005
|
APR_ENOTIME
|
APR没有给定一个时间结构
|
20006
|
APR_ENODIR
|
APR没有给定一个目录结构
|
20007
|
APR_ENOLOCK
|
APR没有给定一个互斥锁结构
|
20008
|
APR_ENOPOLL
|
APR没有给定一个Poll结构
|
20009
|
APR_ENOSOCKET
|
APR没有给定一个socket
|
20010
|
APR_ENOTHREAD
|
APR没有给定一个线程结构
|
20011
|
APR_ENOTHDKEY
|
APR没有给定一个线程Key结构
|
20012
|
APR_ENOSHMAVAIL
|
APR中没有更多的可用共享内存
|
20013
|
APR_EDSOOPEN
|
APR中无法打开一个DSO对象
|
20014
|
APR_EGENERAL
|
APR中的通常的错误
|
20015
|
APR_EBADIP
|
描述的IP地址错误
|
20016
|
APR_EBADMASK
|
描述的IP地址掩码错误
|
20017
|
APR_ESYMNOTFOUND
|
无法查找到请求symbo
|
20018
|
APR_INCHILD
|
程序正在执行子进程
|
70001
|
APR_INPARENT
|
程序正在执行父进程
|
70002
|
APR_DETACH
|
线程从主线程中被分离出来
|
70003
|
APR_NOTDETACH
|
线程尚未从主线程中分离出来
|
70004
|
APR_CHILD_DONE
|
子进程已经执行完毕
|
70005
|
APR_CHILD_NOTDONE
|
子进程尚未执行完毕
|
70006
|
APR_TIMEUP
|
执行操作超时
|
70007
|
APR_INCOMPLETE
|
The operation was incomplete although some processing was performed and the results are partially valid
|
70008
|
APR_BADCH
|
Getopt函数查找到一个不在选项字符串中的选项
|
70012
|
APR_BADARG
|
Getopt发现一个选项缺少参数,而在选项字符串中该选项必须指定
|
70013
|
APR_EOF
|
APR已经到达文件的末尾
|
70014
|
APR_NOTFOUND
|
APR在poll结构中无法发现socket
|
70015
|
APR_ANONYMOUS
|
APR正在使用匿名的共享内存
|
70019
|
APR_FILEBASED
|
APR正在使用文件名作为共享内存的key
|
70020
|
APR_KEYBASED
|
APR正在使用共享key作为共享内存的key
|
70021
|
APR_EINIT
|
70022
|
|
APR_ENOTIMPL
|
在该平台上,该APR函数尚未实现
|
70023
|
APR_EMISMATCH
|
输入的两个密码不匹配
|
70024
|
APR_EABSOLUTE
|
给定的路径值是绝对路径
|
70019
|
APR_ERELATIVE
|
给定的路径是相对路径
|
70020
|
APR_EINCOMPLETE
|
给定的路径既不是相对路径也不是绝对路径
|
70021
|
APR_EABOVEROOT
|
给定的路径在跟路径上
|
70022
|
APR_EBUSY
|
给定的互斥锁正忙,已经被锁定
|
70025
|
APR_EPROC_UNKNOWN
|
该进程无法被APR所识别
|
70024
|
apr_get_os_error
|
apr_set_os_error(e)
|
apr_get_netos_error
|
apr_set_netos_error(e)
|
|
Window
|
GetLastError
|
SetLastError(e)
|
WSAGetLastError
|
WSASetLastError
|
Unix
|
(errno)
|
(errno = (e))
|
(errno)
|
(errno = (e))
|
Netware
|
(errno)
|
(errno = (e))
|
WSAGetLastError
|
WSASetLastError
|
convert to common error code
return common error code
return error code
convert to common error code (using ap_canonical_error)
decide execution based on common error code
#define APR_HAVE_ARPA_INET_H @arpa_ineth@
#define APR_HAVE_CONIO_H @conioh@
#define APR_HAVE_CRYPT_H @crypth@
#define APR_HAVE_CTYPE_H @ctypeh@
#define APR_HAVE_DIRENT_H @direnth@
#define APR_HAVE_ERRNO_H @errnoh@
#define APR_HAVE_FCNTL_H @fcntlh@
#define APR_HAVE_IO_H @ioh@
#define APR_HAVE_LIMITS_H @limitsh@
#define APR_HAVE_NETDB_H @netdbh@
#define APR_HAVE_NETINET_IN_H @netinet_inh@
#define APR_HAVE_NETINET_SCTP_H @netinet_sctph@
#define APR_HAVE_NETINET_SCTP_UIO_H @netinet_sctp_uioh@
#define APR_HAVE_NETINET_TCP_H @netinet_tcph@
#define APR_HAVE_PTHREAD_H @pthreadh@
#define APR_HAVE_SEMAPHORE_H @semaphoreh@
#define APR_HAVE_SIGNAL_H @signalh@
#define APR_HAVE_STDARG_H @stdargh@
#define APR_HAVE_STDINT_H @stdint@
#define APR_HAVE_STDIO_H @stdioh@
#define APR_HAVE_STDLIB_H @stdlibh@
#define APR_HAVE_STRING_H @stringh@
#define APR_HAVE_STRINGS_H @stringsh@
#define APR_HAVE_SYS_IOCTL_H @sys_ioctlh@
#define APR_HAVE_SYS_SENDFILE_H @sys_sendfileh@
#define APR_HAVE_SYS_SIGNAL_H @sys_signalh@
#define APR_HAVE_SYS_SOCKET_H @sys_socketh@
#define APR_HAVE_SYS_SOCKIO_H @sys_sockioh@
#define APR_HAVE_SYS_SYSLIMITS_H @sys_syslimitsh@
#define APR_HAVE_SYS_TIME_H @sys_timeh@
#define APR_HAVE_SYS_TYPES_H @sys_typesh@
#define APR_HAVE_SYS_UIO_H @sys_uioh@
#define APR_HAVE_SYS_UN_H @sys_unh@
#define APR_HAVE_SYS_WAIT_H @sys_waith@
#define APR_HAVE_TIME_H @timeh@
#define APR_HAVE_UNISTD_H @unistdh@
#define APR_HAVE_SHMEM_MMAP_TMP @havemmaptmp@
#define APR_HAVE_SHMEM_MMAP_SHM @havemmapshm@
#define APR_HAVE_SHMEM_MMAP_ZERO @havemmapzero@
#define APR_HAVE_SHMEM_SHMGET_ANON @haveshmgetanon@
#define APR_HAVE_SHMEM_SHMGET @haveshmget@
#define APR_HAVE_SHMEM_MMAP_ANON @havemmapanon@
#define APR_HAVE_SHMEM_BEOS @havebeosarea@
#define APR_USE_SHMEM_MMAP_TMP @usemmaptmp@
#define APR_USE_SHMEM_MMAP_SHM @usemmapshm@
#define APR_USE_SHMEM_MMAP_ZERO @usemmapzero@
#define APR_USE_SHMEM_SHMGET_ANON @useshmgetanon@
#define APR_USE_SHMEM_SHMGET @useshmget@
#define APR_USE_SHMEM_MMAP_ANON @usemmapanon@
#define APR_USE_SHMEM_BEOS @usebeosarea@
|
#define APR_USE_FLOCK_SERIALIZE @flockser@
#define APR_USE_SYSVSEM_SERIALIZE @sysvser@
#define APR_USE_POSIXSEM_SERIALIZE @posixser@
#define APR_USE_FCNTL_SERIALIZE @fcntlser@
#defineAPR_USE_PROC_PTHREAD_SERIALIZE @procpthreadser@
#define APR_USE_PTHREAD_SERIALIZE @pthreadser@
#define APR_HAS_FLOCK_SERIALIZE @hasflockser@
#define APR_HAS_SYSVSEM_SERIALIZE @hassysvser@
#define APR_HAS_POSIXSEM_SERIALIZE @hasposixser@
#define APR_HAS_FCNTL_SERIALIZE @hasfcntlser@
#define APR_HAS_PROC_PTHREAD_SERIALIZE @hasprocpthreadser@
#define APR_HAS_RWLOCK_SERIALIZE @hasrwlockser@
#define APR_PROCESS_LOCK_IS_GLOBAL @proclockglobal@
#define APR_HAVE_CORKABLE_TCP @have_corkable_tcp@
#define APR_HAVE_GETRLIMIT @have_getrlimit@
#define APR_HAVE_IN_ADDR @have_in_addr@
#define APR_HAVE_INET_ADDR @have_inet_addr@
#define APR_HAVE_INET_NETWORK @have_inet_network@
#define APR_HAVE_IPV6 @have_ipv6@
#define APR_HAVE_MEMMOVE @have_memmove@
#define APR_HAVE_SETRLIMIT @have_setrlimit@
#define APR_HAVE_SIGACTION @have_sigaction@
#define APR_HAVE_SIGSUSPEND @have_sigsuspend@
#define APR_HAVE_SIGWAIT @have_sigwait@
#define APR_HAVE_STRCASECMP @have_strcasecmp@
#define APR_HAVE_STRDUP @have_strdup@
#define APR_HAVE_STRICMP @have_stricmp@
#define APR_HAVE_STRNCASECMP @have_strncasecmp@
#define APR_HAVE_STRNICMP @have_strnicmp@
#define APR_HAVE_STRSTR @have_strstr@
#define APR_HAVE_MEMCHR @have_memchr@
#define APR_HAVE_STRUCT_RLIMIT @struct_rlimit@
#define APR_HAVE_UNION_SEMUN @have_union_semun@
#define APR_HAVE_SCTP @have_sctp@
/* APR Feature Macros */
#define APR_HAS_SHARED_MEMORY @sharedmem@
#define APR_HAS_THREADS @threads@
#define APR_HAS_SENDFILE @sendfile@
#define APR_HAS_MMAP @mmap@
#define APR_HAS_FORK @fork@
#define APR_HAS_RANDOM @rand@
#define APR_HAS_OTHER_CHILD @oc@
#define APR_HAS_DSO @aprdso@
#define APR_HAS_SO_ACCEPTFILTER @acceptfilter@
#define APR_HAS_UNICODE_FS 0
#define APR_HAS_PROC_INVOKED 0
#define APR_HAS_USER 1
#define APR_HAS_LARGE_FILES 0
#define APR_HAS_XTHREAD_FILES 0
#define APR_HAS_OS_UUID 0
|
Apache APR可移植运行库简介1-4相关推荐
- apache apr介绍
APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库.在早 ...
- apr java_基于 APR 的原生库
基于 APR 的原生库 简介 Tomcat 可以使用 Apache Portable Runtime(APR) 来增强可扩展性与性能,并能更好地与原生服务器技术相集成.APR 是一种具有高度可移植性的 ...
- apache常见错误:VC运行库(找不到 VCRUNTIME140.dll)
1. 安装apache为系统服务时报错:找不到 VCRUNTIME140.dll 解决方案:安装 VC2015 2. 下载并安装 VC2015 运行库, 运行 VC_redist.x64.exe 无脑 ...
- 计算机的库的分类,计算机运行库的分类和简介
我们在使用软件的时候,经常会碰到"该软件需要 VC++?支持""应用程序配置不正确,未能启动成功""不是有效的Win32程序"等错误提示,而 ...
- C语言标准及C标准库、运行时库简介
1.C语言标准: 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了<The C Programming Language>的第一版(著作简称为 K ...
- tomcat8.5.15 apr模式运行 配置
系统环境:centos6.5 jdk1.7+ tomcat8+ tomcat有3中运行模式,早期的是bio,阻塞式,后来出现nio非阻塞式,再后来又出现apr基于本地库的形式,性能依次提高.据说都 ...
- Nexus.js介绍:一个多线程的JavaScript运行库
首先,如果你不熟悉这个项目,建议先阅读之前写的一系列文章.如果你不想阅读这些,不用担心.这里面也会涉及到那些内容. 现在,让我们开始吧. 去年,我开始实现Nexus.js,这是一个基于Webkit/J ...
- php的VC9-VC14运行库分享以及localhost访问404问题
最近打开phpstudy,一直报错说缺少VC9的运行环境,所以就在网上找了一些运行库,在这里分享给大家. 一.为什么运行php环境需要VC9的运行库 php5.3.5.4和apache都是用vc9编译 ...
- C++运行库 Neptune C++ Runtime Library(xbmc)
一个可以在多个平台C++开发环境下编译运行的C++运行库.其中包括了对多个C++库和平台SDK(HTTP/TCP/UDP/XML, Thread/Message, String, List/Stack ...
最新文章
- shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...
- BZOJ4245 : [ONTAK2015]OR-XOR
- 测试半桥电路 TPS28225,NCP3420驱动MOS半桥
- 在终端输入命令打开mac自带的python工具IDLE
- Reg文件和Bat文件
- 通过options探测服务器信息,OPTIONS 方法在跨域请求(CORS)中的应用
- 从零搭建 dubbogo
- 【原创】SqlServer 2005 BCP命令详解
- pythonexcel计算横列总和-在python中,如何在字典中找到值的总和?每个键都有多个值...
- deeplung代码实现测试是卡住情况说明
- uestc oj 1218 Pick The Sticks (01背包变形)
- fanuc机器人码垛编程实例_两个很简单的FANUC系统CNC加工中心编程实例
- JavaScript中DOM(第二天)
- 012的悲剧终于预言了
- 小甲鱼python作业百度文库_【小甲鱼python课后题.doc】下载 - 面包树
- 1312E	Array Shrinking
- 坐等破亿!华为鸿蒙系统用户升级量已突破1800万,你要升级吗?
- Docker架构部署及镜像制作,免费容器云体验
- 3.数据仓库之确定粒度
- 四款电脑桌面上的优质软件,硬核又实用,有个性而不张扬