- 浏览: 451050 次
- 性别:
- 来自: 北京
最新评论
-
zsxxsz:
2202877 写道你好,请问一下acl库是否可以移植到arm ...
利用ACL开发并发网络服务器 -
taoshengyijiu20008:
非常不错啊
acl 服务器编程框架设计要点 -
lgqss:
最后的例子用了__thread,依然不能用在动态库中?
再谈线程局部变量 -
foxbryant88:
膜拜中~
我为什么要发明一个轮子? -
zsxxsz:
eryueniaobp 写道关于reset的使用,查看了 g ...
使用 acl 库编写高效的 C++ redis 客户端应用
文章列表
字符串分割是在程序编写过程中经常需要做的事情,如,将字符串:hello world, you are welcome!,进行单词分割,结果希望得到5个单词:hello, world, you, are, welcome。使用 ACL_ARGV 函数便可以非常轻松地实现此功能,如下:
// 分割字 ...
- 2009-10-20 13:19
- 浏览 1935
- 评论(0)
一、概述
当我们在使用C++、JAVA、.NET等面向对象语言甚至象PHP等脚本程序编写字符串处理程序,觉得字符串处理是如此的简单,但当用C编写字符串处理程序时,用得最多可能是诸如:snprintf 、strchr、strcat等标准C函数,但若遇到字符串缓冲区需要动态变化时,就不得不多做一些工作来做内存重新分配的事情,嗯,好繁琐的工作。而POSTFIX代码里有一个非常好用的字符串处理函数库:基于VSTRING结构的字符串处理函数集合,ACL作者将该函数集移植至ACL工程中(重新命名为ACL_VSTRING,没办法,C语言没有象C++那样的命名空间)并使该库可以运行在多个平台上(UNIX、 ...
在编写高效的程序时,内存缓存有时是非常有用的,提到缓存,大家可能会很容易想到可以使用哈希表这种最常用的方式来缓存内存对象,但哈希的实现代码一般不具备两项功能:缓存过期时间、缓存数量限制,如果要增加对此二项功能的支持,一般需要增加辅助的链表结构。如果使用ACL里的 ACL_CACHE,则在高效缓存的前提下支持这两项功能。
下面是ACL_CACHE的数据结构及常用的接口调用:
一、数据结构及常用接口说明
1、数据结构定义
/**
* 缓冲池对象结构定义
*/
typedef struct ACL_CACHE {
ACL_HTABLE *table; /**< ...
在用C/C++写程序时,若要根据域名查找其对应的IP地址,大家一般会用到 gethostbyname 的标准函数,如若要查询 www.sina.com.cn 域名调用 gethostbyname 时,该函数首先会查找本机 hosts 文件里的条目,若该配置文件里没有对应域名, ...
经常使用C++、JAVA等面向对象语言开发的程序员都会比较喜欢容器的迭代器功能,用起来方便简洁。象一些常用的数据结构,如:哈希表、动态数组、链表等,在这些面向对象语言中都可以非常方便地使用迭代器。当然,在C语言中也有对这些常用数据结构的函数封装,但要对容器中元素的遍历,则一般会通过注册回调函数的方式。如下:
/* 以C语言中非常流行的 glib 库中的哈希表操作为例 */
static void print_record(gpointer key, gpointer val, gpointer ctx)
{
printf("%s: key(%s), ...
一、概述
现在多核时代多线程开发越来越重要了,多线程相比于多进程有诸多优势(当然也有诸多劣势)。在早期C的库中,有许多函数是线程不安全的,因为内部用到了静态变量,比如:char *strtok(char *s, const char *delim); 该函数内部就有一个静态指针,如果多个线程同时调用此函数时,可能就会出现奇怪的结果,当然也不是我们所想要的,现在LINUX对此函数功能有一个线程安全版本的接口:char *strtok_r(char *s, const char *delim, char **ptrptr),这就避免了多个线程同时访问的冲突问题。其实,如果保持 strtok() ...
1、概述
C语言有一些非常基本的数据类型,正是这些基本类型让我们可以延伸了无限的用户自定义类型,本文主要介绍了 int, size_t, time_t, long, long long int 等基本数据类型在Linux32 及 Linux64 的使用情况。表面看上去,这些类型确实太基础太简单,似乎没啥可讲的,实事似乎也是如此,用过C的对这些都已经非常熟悉了,这还用讲?在PC 64位机器出来之前,我们确实不用太关注这些,因为在32位机上编程,似乎很少出现过什么问题,但64位机出来了,象Linux 也支持64位机器,问题就来了,为什么?因为它们的长度发生了变化,而我们的程序也就有可能需要改变 ...
请先看一个例子,如下:
void test()
{
ACL_HTABLE *table = acl_htable_create(10, 0); /* 创建哈希表 */
ACL_HTABLE_ITER iter; /* 哈希表的遍历变量 */
char *value, key[32];
int i;
for (i = 0; i < 100; i++) {
...
在“协作半驻留式服务器程序开发框架 --- 基于 Postfix 服务器框架改造 “文章中,介绍了ACL库中协作式半驻留服务器程序框架,本文将以其中第4)种(多线程进程池)开发框架为基础编写一个简单的 demo 程序,使大家熟悉这类服务器程序的开发方式。 该 demo 一个简单的 echo 服务器程序,主要由 main.c, service_main.c, service_var.c, service_main.h, service_var.h, Makefile 六个文件组成。下面分别介绍一下各个文件的主要功能。 1) main.c 主程序
#include &qu ...
程序员在写程序时经常需要在源程序里写一些注释,以备自己或他人以后再看时方便理解,程序的注释格式有多种,而 JavaDoc 的注释格式现在似乎更为流行,不仅 Java 语言在使用它,其它语言如:Javascript, C/C++, Php 等流程语言也越来多地采用 JavaDoc 注释方式。有了注释格式,当然需要有一个注释格式分析工具能够对注释内容进行清晰。Doxygen 便是这个方便的注释分析工具,它可以非常方便地将源程序里的按 JavaDoc 格式注释的内容提取出来,形成各种需要的帮助手册(如:Html格式,Man 格式,RTF格式等),因为doxygen是如此好用,以至于很多开源的软件 ...
D编译完全开源了,于是忍不住下载了最新的dmd编译源码(dmd.2.029),然后在Redhat AS3上进行编译,但是还是遇到了一些小问题。下面将详细过程介绍一下:
1) 先解压
unzip dmd.2.029.zip
便生成目录 dmd, 该目录下有:src/, linux/, windows/samples/ 等目录
2) 编译dmd编译器
cd dmd/src/dmd/
make
# 便会报错
backend/dwarf.c:54:26: ../mars/mars.h: No such file or directory
# 于是创建目录同时要拷贝两个文件至新建目录:
make mars ...