APR源代码分析-高级IO篇
近两天稍轻闲了些,便抓紧时间学习、学习再学习。在“APR分析-文件IO篇”,我们只分析了最基本的I/O操作,如文件的open、close、write和read。当然File I/O操作不止这些,在这一篇中我们来看看APR提供的一些高级I/O设施,包括记录锁、I/O多路复用和内存映射文件(内存映射文件将和共享内存一起分析)。 ...
近两天稍轻闲了些,便抓紧时间学习、学习再学习。在“APR分析-文件IO篇”,我们只分析了最基本的I/O操作,如文件的open、close、write和read。当然File I/O操作不止这些,在这一篇中我们来看看APR提供的一些高级I/O设施,包括记录锁、I/O多路复用和内存映射文件(内存映射文件将和共享内存一起分析)。 ...
文件I/O在Unix下占据着非常重要的地位,曾有一句经典语句绝对可以说明file在Unix下的重要性,That is “In UNIX, everything is a file”,APR就是本着这个思想对Unix文件I/O进行了再一次的抽象封装,以提供更为强大和友善的文件I/O接口。 APR File I/O源代码的位置在$(APR_HOME)/file_io目录下,本篇blog着重分析unix子目录下的相关.c文件内容,其相应头文件为$(APR_HOME)/include/apr_file_io.h和apr_file_info.h。 ...
U know 信号是Unix的重要系统机制。信号机制使用起来很简单,但是理解起来有并不是那么Easy。APR Signal的封装也并不繁琐,代码量很少,所以分析APR Signal的过程其实就是学习Signal机制的过程。 一、信号介绍 1、Signal“历史久远”,在最初的Unix系统上就能看到它“伟岸”的身影。它的引入用来进行User Mode进程间的交互,系统内核也可以利用它通知User Mode进程发生了哪些系统事件。从最开始引入到现在,信号只是做了很小的一些改动(不可靠信号模型到可靠信号模型)。 ...
最近在写一个串口程序,设备提供商的通讯协议说明中明确了内部通讯方式为“ASCII码”。其实每个和计算机打交道的人都会天天接触ASCII码,只是ASCII码藏在了幕后,我们很少与之正面打交道罢了,这次机会正好让我有机会到幕后去看看ASCII码的“庐山真面目”。 ...
谈到程序员似乎总是离不开“健康”这个话题,程序员是职业病的高发群体,一般工作2-3年的程序员或多或少的都有“小疾”。每个正规的公司每年都应有至少一次的“福利体检”。今天是我第一次参加公司的福利体检,入司时参加过体检,由于大学刚毕业,自然很自信身体没问题。在公司度过一年的时光后,也道听途说的知道一些说法,比如“某某人工作一年得高血压、脂肪肝”等,这给我这次体检带来了一丝悬念,自己也在担心我现在的身体还健康么? ...
内存管理一直是让C程序员头痛的问题,作为一个通用接口集,APR当然也提供其自己的内存管理接口–APR Pool。APR Pool作为整个APR的一个基础功能接口,直接影响着APR的设计风格。在这篇Blog中,我们就要和APR Pool来一次“亲密接触”。(还是以Unix平台实现为例) ...
Apache Server的进程调度一直为人所称道,Apache 2.0推出的APR对进程进行了封装,特别是Apache 2.0的MPM(Multiple Process Management)框架就是以APR封装的进程为基础的,下面就让我们一起来探索一下APR的进程封装吧(以Unix平台为例)。 ...
作为一个可移植的运行时环境,APR的设计当然是很精妙的,但精妙的同时对使用者有一些限制。 APR附带一个简短的设计文档,文字言简意赅,其中很多的设计思想都值得我们所借鉴,主要从三个方面谈。 1、类型 1) APR提供并建议用户使用APR自定义的数据类型,好处很多,比如便于代码移植,避免数据间进行不必要的类型转换(如果你不使用APR自定义的数据类型,你在使用某些APR提供的接口时,就需要进行一些参数的类型转换);自定义数据类型的名字更加具有自描述性,提高代码可读性。APR提供的基本自定义数据类型包括: typedef unsigned char apr_byte_t; typedef short apr_int16_t; typedef unsigned short apr_uint16_t; typedef int apr_int32_t; typedef unsigned int apr_uint32_t; typedef long long apr_int64_t; typedef unsigned long long apr_uint64_t; 这些都是在apr.h中定义的,而apr.h在UNIX平台是通过configure程序生成的,在不同平台APR自定义类型的实际类型是完全有可能不一致的。 ...
由于部门所使用的底层库与Apache Server有着“一定的渊源”,所以总有一种想看看Apache的实现的冲动。最近项目收尾,愿望终可实现。 一、何为APR? Apache Server经过这么多年的发展后,将一些通用的运行时接口封装起来提供给大家,这就是Apache Portable Run-time libraries, APR。 ...
类型表示(representation of types) 1、一般规则 a) 除了位域(bit field)之外的对象都是由一个或多个相邻序列字节组成的,这些字节的个数(number)、次序(order)和编码方式或是显式说明的,或是实现定义的。 ...