分类目录归档:Linux开发

异步编程经典 读skipfish源码

skipfish是google开源出来的一款安全检测工具(google真是好啊,开源了好多东东)。作者是个geek,写起程序来相当精干老道,项目主页上列举其特点之一:

High speed: pure C code, highly optimized HTTP handling, minimal CPU footprint – easily achieving 2000 requests per second with responsive targets.

一个单线程的程序如何能达到这个性能我们就来分析一下源码吧。

先从高处俯瞰一下整个程序:

整个程序分为一下几个模块:

http模块(http_client.c),数据……..

Python 中使用 pyrex 生成 Linux 可执行文件

这个问题是相当有意义的,如果有了比较好的方法,Python 完全可以用来开发商业软件,而不用担心源代码泄露。

前两天我在网上看了看,有很多的人在问这个问题。大部分的人都在用 py2exe,这是个对 Python 程序打包的东东,实际上只是在 Python 程序中找 出依赖的模块,然后发布这个程序。好处在于可以让这个程序脱离 Python 的环境来执行,不用安装 Python 解释器。但实际上并不能保护源代码,因为源 代码其实也包含在其中了。更好的办法是使用 Pyrex。在 http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ 可以下载到。本来 Pyrex 是一个用来混合 编写 Python 和 C 程序的东西,然后……

Linux内核C99结构体指定初始化

在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。

下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样…….

把VIM打造成一个简单实用的IDE

习惯在Linux下coding。

分享下Linux下的VIM使用吧,可以作为一个简单的IDE,虽然赶不上sorce insight,eclipse那么功能强大,但也足够用了。

网上很多关于这方面的资料,但我们大部分时间用不到那么多,我就挑一些常用的吧。

以下均以C/C++为例,Fedora14下VIM讲解,如果您是…….

你不是软件工程师!

你不是软件工程师。你不是在建摩天大楼。你不是在建公路桥梁。
你是在从事园艺,培育花草。
你是一个软件园丁。
你是否会在种下第一粒种子前就规划你的花园,细节精确到定位每个叶子应该长在哪里?人们是否会期望能精确的估算出这一年会开出多少花朵(或你的公司 是否做出这样…….

Linux标准IO库缓存策略介绍

标准IO库操作是围绕着流来进行的,当我们通过fopen标准IO库函数打开一个文件,我们就使一个文件和一个IO流相关联。在这里我们把IO流和文件指针FILE*等同起来,因为所有针对IO流的操作都是通过FILE*指针来实现的。
我们知道引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,而系统调用会消耗较多的资源。因此标准IO库引入了IO缓存,通过累积一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从…….

Linux 2.6.32的内核栈和用户空间栈关系

1.进程的堆栈

内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。

2.进程用户栈和内核栈的……

字符集和字符编码(Charset & Encoding)

相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如”бЇЯАзЪСЯ”、”�????????”?还记得HTTP中的Accept-Charset、Accept-Encoding、Accept-Language、Content-Encoding、Content-Language等消息头字段?这些就是接下来我们要探讨的……..

Linux Epoll介绍和程序实例

1. Epoll 是何方神圣?

Epoll 可是当前在 Linux 下开发大规模并发网络程序的热门人选, Epoll 在 Linux2.6 内核中正式引入,和 select 相似,其实都 I/O 多路复用技术而已 ,并没有什么神秘的。

其实在 Linux 下设计并发网络程序,向来不缺少方法,比如典型的 Apache 模型( Process Per Connection ,简称 PPC ), TPC ( Thread Per Connection )模型,以及 select 模型和 poll 模型,那为何还要再引入 ……