pjlib系列开篇

PJLIB是pj项目中最底层的库,也许你不想用pjsip,想使用exosip;不想使用pjmedia,想使用webrtc,但是pjlib作为公共库还是一个不错的选择。PJLIB提供的特性,先翻译一下官方文档的描述,此翻译来源于网友pjlib官方文档
1).非动态内存分配[No Dynamic Memory Allocations]
实现了内存池,获取内存是从与分配的内存池中获取,高性能程序多会自己构造内存池,后面我们会解释该内存池的使用以及基本的原理。根据作者的比较,是常规的 malloc(
)/free()函数的30倍。

2).OS抽象[Operating System Abstraction]
实现OS抽象的根本原因在与可移植性,毋庸置疑:).
涉及到:
a).线程[Threads.]
b).线程本地存储[Thread Local Storage.]
c).互斥[Mutexes.]
d).信号灯[Semaphores.]
e).原子变量[Atomic Variables.]
f).临届区[Critical sections.]
g).锁对象[Lock Objects.]
h).事件对象[Event Object.]
i).时间管理[Time Data Type and Manipulation.]
j).高解析的时间戳[High Resolution Timestamp.]

3).底层的网络相关IO[Low-Level Network I/O]
a).Socket抽象[Socket Abstraction.]
b).网络地址解析[Network Address Resolution.]
c).实现针对Socket的select API[Socket select() API.]

4).时间管理[Timer Management]
这主要涉及到两个部分,一个是定时器的管理,还有就是时间解析的精度(举例说来,就是能精确到哪个时间等级,比如 POSIX sleep(),就只能以秒为单位,而使用select()则可
以实现毫秒级别的计时)

5).各种数据结构[Various Data Structures]
主要有:
a).针对字符串的操作[String Operations]
b).数组辅助[Array helper]
c).Hash表[Hash Tabl]
d).链表[Linked List]
e).红黑平衡树[Red/Black Balanced Tree]

6).异常处理[Exception Construct]
使用的是TRY/CATCH,知道C++/JAVA之类面向对象语言的人看过会宛而一笑:)

7).LOG机制[Logging Facility]
很显然,一个良好的程序,好的LOG机制不可少。这能很方便的让你去调试程序,对此我
是深有体会,任何时候,不要忘记“好的程序,是架构出来的;而能跑的程序,是调试出
来的:)”

8).随机数以及GUID的产生[Random and GUID Generation]
GUID指的是"globally unique identifier",只是一个标识而已,比如说你的省份证,
算的上是一个GUID,当然,准确说来是“china unique identifier”:).

下面对pjlib的.c和.h文件进行整理分类,然后一块一块地学习。

一、非动态内存分配
pool.h
pool_alt.h
pool_buf.h
pool_i.h
pool.c
pool_buf.c
pool_caching.c
pool_dbg.c
pool_policy_kmalloc.c
pool_policy_malloc.c
pool_policy_new.cpp
pool_signature.h

二、操作系统抽象
os.h
os_core_darwin.m
os_core_symbian.cpp
os_core_unix.c
os_core_win32.c
os_error_symbian.cpp
os_error_unix.c
os_error_win32.c
os_info.c
os_info_iphone.m
os_info_symbian.cpp
os_rwmutex.c
os_symbian.h
lock.h
lock.c
errno.h
errno.c
os_timestamp_common.c
os_timestamp_posix.c
os_timestamp_win32.c
os_time_bsd.c
os_time_common.c
os_time_unix.c
os_time_win32.c
timer.h
timer.c
timer_symbian.cpp

file_access.h
file_access_unistd.c
file_access_win32.c
file_io.h
file_io_ansi.c
file_io_win32.c

三、网络IO
sock.h
sock_bsd.c
sock_common.c
sock_select.h
sock_select.c
sock_select_symbian.cpp
sock_symbian.cpp
sock_uwp.cpp
sock_uwp.h

sock_qos.h
sock_qos_bsd.c
sock_qos_common.c
sock_qos_darwin.c
sock_qos_dummy.c
sock_qos_symbian.cpp
sock_qos_wm.c

addr_resolv.h
addr_resolv_sock.c
addr_resolv_symbian.cpp

ip_helper.h
ip_helper_generic.c
ip_helper_symbian.cpp
ip_helper_win32.c
ip_helper_winphone8.c

ioqueue.h
ioqueue_common_abs.c
ioqueue_common_abs.h
ioqueue_dummy.c
ioqueue_epoll.c
ioqueue_select.c
ioqueue_symbian.cpp
ioqueue_uwp.cpp
ioqueue_winnt.c
activesock.h
activesock.c

ssl_sock.h
ssl_sock_common.c
ssl_sock_dump.c
ssl_sock_gtls.c
ssl_sock_ossl.c
ssl_sock_symbian.cpp

四、数据结构
array.h
array.c
hash.h
hash.c
list.h
list_i.h
list.c
rbtree.h
rbtree.c
fifobuf.h
fifobuf.c
string.h
string_i.h
string.c
unicode.h
unicode_symbian.cpp
unicode_win32.c

五、异常
except.h
except.c
exception_symbian.cpp

六、日志
log.h
log.c
log_writer_printk.c
log_writer_stdout.c
log_writer_symbian_console.cpp


七、工具
math.h
rand.h
rand.c
guid.h
guid.c
guid_android.c
guid_simple.c
guid_uuid.c
guid_win32.c

八、杂项
config.h
config.c
ctype.h
ctype.c
types.h
types.c
limits.h
assert.h
extra-exports.c
symbols.c

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值