随笔分类 -  1.首页原创精华区

摘要:接上篇初始化与创建,本篇阐述Socket操作和销毁两部分的实现。 Socket操作 系统调用read(v)、write(v)是用户空间读写socket的一种方法,为了弄清楚它们是怎么通过VFS将请求转发到特定协议的实现,下面以read为例(write同理),并假定文件描述符对应的是IPv4 TCP类 阅读全文
posted @ 2015-05-03 16:55 cq12yue 阅读(22) 评论(0) 推荐(0)
摘要:引言 在Unix的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。对于网络套接字socket也是如此,除了专属的Berkeley Sockets API,还支持一些标准的文件IO系统调用如read(v)、write( 阅读全文
posted @ 2015-05-03 16:31 cq12yue 阅读(32) 评论(0) 推荐(0)
摘要:字符集合 依据RFC3986 2规范,HTTP URI中允许出现的US-ASCII字符的子集,可以分成保留、未保留及转义这几类,每类的全部字符列表如下 ● 保留: : / ? # [ ] @ ! $ & '( ) * + ,; =共18个,一般用于URI部件分隔符。 ● 未保留: a-z A-Z 0 阅读全文
posted @ 2015-02-10 18:40 cq12yue 阅读(19) 评论(0) 推荐(0)
摘要:脚本概述 nginx是一款著名的开源web服务器,为方便升级与恢复,编写了一个简单的脚本,因为升级备份了可执行文件和配置文件(后缀名为old),所以可用于恢复。当升级时,若nginx正在运行,则不中断服务进行平滑升级,否则直接拷贝覆盖;当恢复时,若nginx正在运行,则不中断服务进行平滑恢复,否则直 阅读全文
posted @ 2015-01-19 00:36 cq12yue 阅读(35) 评论(0) 推荐(0)
摘要:本文描述了一种简单的跨平台锁框架的设计与实现,该框架小巧实用、易于扩展,它的特点如下: ● 实现了线程间互斥锁 ● 实现优化了单线程环境中的空锁和空级别锁 ● 支持编译时或运行时选择锁 ● 支持对象和类级别的锁粒度 ● 支持错误或异常处理 框架结构 由锁抽象、锁适配器、锁守卫、线程互斥锁和锁级别5个 阅读全文
posted @ 2014-12-28 23:38 cq12yue 阅读(16) 评论(0) 推荐(0)
摘要:众所周知,TLS是指线程局部存储,FIFO是Unix中的命名管道,可用于无关进程间的通信,而本文描述的TLS FIFO是指这样一种机制:如果一个线程在每次IO操作时,若没有连接,则先连接到FIFO服务端,再将连接关联到这个线程的TLS中,这里的连接即创建并打开唯一的FIFO,之后的读写就在这个FIF 阅读全文
posted @ 2014-12-01 00:13 cq12yue 阅读(10) 评论(0) 推荐(0)
摘要:Web服务器为了支持https访问,通常会使用第三方库openssl实现,而且为了高性能采用异步事件驱动模型,因此连接套接字被设为非阻塞类型,本文在nginx ssl模块的基础上,简化提取它的核心框架,使用面向对象的方式描述,从握手、读写和关闭3个方面进行了分析,由于这3个操作都是异步的,因此操作失 阅读全文
posted @ 2014-04-11 17:26 cq12yue 阅读(35) 评论(0) 推荐(0)
摘要:为了方便更改系统tcp内核的一些参数,编写ktcpopt脚本如下 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1#! /bin/bash 2# kt 阅读全文
posted @ 2014-03-24 18:44 cq12yue 阅读(6) 评论(0) 推荐(0)
摘要:脚本概述 一般地,当在目标机器编译安装某个服务程序后,为了使服务能开机自启动和关机自停止,则需要将其添加为系统服务。但不同的Linux系统管理服务的方法不同,如Ubuntu使用update-rc.d命令,而RedHat则使用chkconfig命令。因此为了能自动识别系统的类型,减少人工控制,编写了一 阅读全文
posted @ 2014-01-03 17:11 cq12yue 阅读(13) 评论(0) 推荐(0)
摘要:本文以系统的struct timeval为例,使其支持+、-、+=、-=4种算术运算和<,<=,>,>=,==、!= 6种关系运算,这样一来就免去了显式调用函数的麻烦,使代码简洁优雅,实现如下 Code highlighting produced by Actipro CodeHighlighter 阅读全文
posted @ 2013-10-28 23:37 cq12yue 阅读(6) 评论(0) 推荐(0)
摘要:继上篇TCP/IP FAQ(1),本篇涵盖了域和协议、IP编址、插口、原始IP、unix域方面的问题与解答。 【Domain & Protocol】 1. 什么是域,它和协议有什么关系? 域可以理解为一种容纳协议的空间,它的存在便于了协议的分类;域和协议是集合与元素的关系,一个域中的每个协议使用同类 阅读全文
posted @ 2013-09-03 15:52 cq12yue 阅读(20) 评论(0) 推荐(0)
摘要:TCP/IP FAQ系列,以经典的4.4BSD-Lite实现为准,参考《TCP/IP协议详解》3卷 ,加入个人的思考理解,理清主干,不深究细枝末节,皆在总结基本原理和实现。本篇涵盖了数据链路层、ARP、RARP、IP、ICMP、TCP、UDP方面的问题与解答。 【Data Link】 1. 环回接口 阅读全文
posted @ 2013-08-25 10:50 cq12yue 阅读(16) 评论(0) 推荐(0)
摘要:由于从其它平台如windows传输文件到类unix平台时,用vim等编辑工具打开时,有时会发现行尾有^M,其实这就是控制字符CR,ASCII码为13。为方便删除这个字符,编写了一个简单的dos2unix脚本,最多带2个参数,特点如下: ● 第1个参数表示目标文件或目录,当为文件时则处理非脚本本身的文 阅读全文
posted @ 2013-08-08 19:06 cq12yue 阅读(15) 评论(0) 推荐(0)
摘要:由于read、readv、write和writev函数一次读或写有时并不能满足所要求的数据,因此需要多次调用直到要求的字节数或者出错。针对这4个系统调用,编写了对应的xxxn版本,实现如下 Code highlighting produced by Actipro CodeHighlighter ( 阅读全文
posted @ 2013-08-02 19:44 cq12yue 阅读(6) 评论(0) 推荐(0)
摘要:基本原理 1)系统CPU使用率等于两个时间点的CPU非空闲时间差除以CPU时间总量差得到的百分比,这两者可从/proc/stat文件获得。 2)系统内存使用率等于系统物理内存消耗量除以系统物理内存总量(memtotal,以KB为单位)得到的百分比,这两者可从/proc/meminfo文件获得。 3) 阅读全文
posted @ 2013-05-31 19:04 cq12yue 阅读(0) 评论(0) 推荐(0)
摘要:情景分析 现已存在一个可用稳定的异步客户端类http_client_base,该类基于boost asio实现了连接服务器,发送请求,获取响应和解析http数据等操作,该类的大致实现框架如下 Code highlighting produced by Actipro CodeHighlighter 阅读全文
posted @ 2013-03-20 20:47 cq12yue 阅读(0) 评论(0) 推荐(0)
摘要:本文以统计磁盘文件系统已用空间为例说明awk的用法,使用命令df可获得磁盘文件系统的相关信息,如下图所示 第3列Used便是已用空间的数据,这是正常的情形。当第1列Filesystem文本过长时,就有可能换行输出,这是特殊的情形,如下图所示 针对这两种情形,如何写出有效的命令脚本来统计Used列的数 阅读全文
posted @ 2012-11-01 17:47 cq12yue 阅读(0) 评论(0) 推荐(0)
摘要:引言 在面向对象类的设计中,有时为了强化效能,特别是当构造大量小对象时,为了改善内存碎片,就需要自己实现对象的内存管理,以替换系统缺省的分配和释放行为,即全局的new和delete。按照c++标准,在定制类专属的new和delete时,为了减免客户代码使用时的麻烦和问题,需要考虑同时定制简单(nor 阅读全文
posted @ 2012-09-27 17:37 cq12yue 阅读(0) 评论(0) 推荐(0)
摘要:情景分析 在网络编程中,通常异步比同步处理更为复杂,但由于异步的事件通知机制,避免了同步方式中的忙等待,提高了吞吐量,因此效率较高,在高性能应用开发中,经常被用到。而在处理异步相关的问题时,状态机模式是一种典型的有效方法,这在libevent、memcached、nginx等开源软件(库)中多次被使 阅读全文
posted @ 2012-09-20 15:48 cq12yue 阅读(0) 评论(0) 推荐(0)
摘要:为方便查看特定TCP服务器进程的CPU、内存和网络连接情况,编写了一个简单的脚本perf.sh,其原理是指定--tcp或-t选项来调用netstat命令,指定aux -T选项参数调用ps命令,对输出结果根据进程名称或PID调用grep过滤;为了输出结果的可读性,先调用ps和netstat,用head 阅读全文
posted @ 2012-09-04 16:35 cq12yue 阅读(0) 评论(0) 推荐(0)