首页 » C/C++

Linux libaio

Linux aio是Linux下的异步读写模型。
对于文件的读写,即使以O_NONBLOCK方式来打开一个文件,也会处于”阻塞”状态。因为文件时时刻刻处于可读状态。而从磁盘到内存所等待的时间是惊人的。为了充份发挥把数据从磁盘复制到内存的时间,引入了aio模型。linux下有aio封装,但是aio采用的是线程或信号用以通知,为了能更多的控制io行为,可以使用更为低级libaio。
一、基本函数与结构
1. libaio函数
extern int io_setup(int m...

javascript V8惊人的性能

今天测试了一下V8,虽然一直听说和感觉到V8快,但测试后发现性能超过C++ STL,甚至超过了C函数。着实惊人。
一、测试代码:
1. C++:test.cc
#include <sys/time.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <list>
#include <string>
#include <map>...

Linux下使用inotify监控文件动作

在日常应用中,常常会遇到以下场景,监控文件夹A,若文件夹中的B文件发生变化,则执行C命令。Linux下可以通过inotify完成该功能。
自从Linux kernel 2.6.13起,inotify以作为内核的一部份,同时需要glibc 2.4以上版本。
1. 相关函数
inotify_init() – 创建一个inotify实例
inotify_add_watch(int fd, const char *pathname, uint32_t mask) – 加入文件或目录到in...

lua 学习

最近写C++程序打算支持一些脚本,试了下ruby,1.9M的体积,..,随想到号称迷你的lua,果然很迷你,只有100~200K,虽然lua在WOW中很火,可本人并没有接触过过,乘这个机会学习下lua。
lua版本 5.1.4
一、预备知识
关键词:
and break do else elseif
end false for function if
in local n...

boost::asio 与 C++0x

看到C++0x的lambda特性,随想到boost::asio,于是拿来练练手,的确很方便。但总有邪教的感觉。
以下代码的编译环境还是满苛刻的。
本人的编译环境为gcc 4.5.2 + boost 1.46。C++0x lambda则需要gcc 4.5以上版本
程序功能
命令:http-get 域名
功能:输出域名的首页,接收所有数据。因为是所有数据。所以有的数据会包含Chunk信息。
代码比较简单,都是最基本的应用,所以没啥注释。由于asio的handler全使用了lambda,代码整洁了许多,没有了长...

C++0x 初探

看到新闻ISO C++委员会批准C++0x最终草案后很纠结,犹豫要不要跟进,因为最近几年都一直挺简单就是美。
一、C++0x的新特性
C++0x有着一系列新特性,以下3个我个人比较中意
1. lambda表达式
[](int x, int y) { return x + y; }
2. auto类型推导
auto plus = [](int x, int y) { return x + y; }
3. 串型初使化
vector<int> v={1,2,3,4,5}
上述三个特性的测试,gcc...

Socket的4种模型

一、模型比喻
1. 同步Sockets
1个护士照顾一位病人,直至病人出院再照顾下位病人。
缺点:后来想住院的等得花儿都谢了。
2. 多线程 同步Sockets
多位护士照顾多位病人,每位护士照顾病人出院再照顾下位病人。
缺点:医院开销太大。
3. 异步Sockets
1个护士照看N个病人,每个病人都有床头都有一个呼叫器可以呼叫护士,但响应器比较落后,是一排发光二极管和一个报警器,当报警器响时,该护士就去检视这排发光二极管以确定病人病床号。
缺点:发光二极管板大小有限,最多只能插1024个,...

理解C的const

首先C的变量通常可定义为2部分,变量类型,变量对象。
比如 char *p;
可以理解成 char* p, p是一个指针,
也可以理解成 char *p, *p是一个字符。
而我采用的是2的理解方式。
其次对于c来说
const char 与 char const 是等价的
通过2的理解方式就可以很容易理解const
参见以下4个例子
const int p
== int const p
变量类型
变量对象
int const
p
p
常数
const char **p
== char...

Linux下的本地化与国际化 – 2. gettext

GNU gettext 是一套GNU下的国际化工具,几乎支持所有Linux下的计算机语言。在gettext的帮助下,可以轻松完成程序的国际化。...

Linux下的本地化与国际化 – 1. locale

locale是POSIX标准下系统用于区域管理的系统,使系统满足不同地区用户的语言,日期格式等文化习惯。
一、为什么要国际化
各个地区有各自不同的文化,因为文化的差异,因此对同一事物如当前日期,货币格式等有着各自的描述方式,为了使程序面向世界,国际化必不可少。
二、Linux下的国际化
Linux 遵循标准 POSIX 2001
因此,对于地区习惯的定义共分为以下系统环境变量:
LC_COLLATE
字符序
LC_CTYPE
字符类别,如定义A的小写为a
LC_MONETARY
货币格式...