自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 问题集

1,函数返回值应该怎么设计,根据不同错误返回不同?当前的一个看法是返回值-1为错误,>=0 为正确,同时按照不同功能标示不同结果。在错误情况下,不同情况不同日志进行错误提示。2,函数设计成多处返回还是用goto统一到最后返回?

2011-10-25 11:18:12 255

原创 BOOK LIST

最近在读  C语言程序设计 数据结构与算法分析 以下是一个必读书籍列表,还在不停扩充当中。不过我认为最有效的一句话还是最后那句。C语言系列1 高质量C++/C编程 每隔一段时间都应该读读 链接 http://man.chinaunix.net/develop/c&c++/c/c.htm2 程序员面试宝典 找工作必备3 C语言程序设计 经典的C语言书

2011-10-20 16:21:41 428

原创 后台server常用技术学习总结

一、常用架构1、Interface与ServerInterface负责接收外部请求并分发到具体的Server,并在包头记录外部请求者的地址,其实就是interface负责转包,这样就能使得系统对外呈现出单一的接口IP,同时方便扩容。Server负责从interface接收请求,并实际处理请求并发出的回应包,目标地址即为interface在包头中的记录地址。问题就出现了短板在interf

2012-05-12 11:56:38 720

原创 Mysql进阶

存储引擎比较MyISAM:应用于以读写操作为主,很少更新、删除,并对事务的完整性、并发性要求不高的情况。InnoDB:应用于对事务的完整性要求高,在并发条件下要求数据的一致性的情况。

2012-02-27 20:29:01 314

原创 服务器性能估算

互联网行业,服务器的性能是非常重要的,上次老大问我能支撑多少上传量,我直接老实的说,这个我还真的没有算过。会后虚心请教了一下达人,简单的做一下记录吧。一般服务器,一台机器,几个指标:CPU、内存、IO和带宽。1、CPU,可以看峰值情况下的CPU占用率,根据实际应用就可以得出你的服务器是否可以经受住,如果不行,那就计划扩容吧。2、内存,也是一样的,峰值情况下你的内存是否是瓶颈。3、I

2011-12-24 18:38:17 593

原创 共享内存之shmget

http://linux.die.net/man/2/shmgethttp://linux.die.net/man/8/ipcsint shmget(key_t key, size_t size, int shmflg);以下几种情况会创建一个新的共享内存段:1、如果key有IPC_PRIVATE标志2、如果没有IPC_PRIVATE标志,但是没有key对应的内存,并且sh

2011-12-20 13:21:54 564

原创 mysql之数据类型

一、数据类型1、整数类DECIMALNUMERIC实际将数字以字符串形式保存2、小数类(浮点类)FLOAT 单精度DOUBLE 双精度3、整数类型TINYINT 1字节SMALLINT 2字节MEDIUMINT 3字节INT4字节BIGINT8字节二、日期时间类型DATE 日期TIME  时间DATETIME 日期和时

2011-11-20 08:43:32 322

原创 mysql入门

1、找出当前存在的数据库show databases;use databasename;show tables;2、创建数据库create database info;use info;3、创建一个数据库表show tables;create table mytable (name VARCHAR(20), sex CHAR(1), birt

2011-11-19 12:16:03 280

原创 排序算法总结

1,最简单的排序算法:冒泡排序 特点:简单直观,在数据量小时,所有排序算法性能差别不大。2,性能优异算法:快速排序特点:性能优异,不需要额外空间,数据量大而且全部在内存中时,首选。采用分而治之的方式降低复杂度。3,数据无法完全加载到内存:归并排序特点:不要求将所有数据全部加载到内存中。

2011-10-25 17:48:03 286

原创 可变参数实现分析

代码分析va_list 定义成指针va_end 空定义va_arg 取下一个变量地址va_start 取的第一个参数后面参数的起始地址#include #define va_list void *#define va_end(arg)#define va_arg(arg, type) *(type *)arg; arg = (char *)arg + siz

2011-10-24 15:37:36 321

原创 程序设计的惯用手法

其实每个公司都有自己的特色,所以入职后,多看公司代码,一来可以快速的理解代码从而胜任工作,二来可以学习一些惯用手法,例如电信设备有电信设备代码的特点,互联网行业有大并发大规模数据处理等,所以你需要去了解,这就是经验。1 ,预分配每次申请比实际需求要大,这样就可以保证不用每次都申请。2,对象引用计数当每次有别人引用,都需要将引用加一,当不用时,则减一,当到达0时,被彻底释放掉,在内核

2011-10-24 15:19:12 355

原创 LINUX共享内存mmap

很多事情看起来很简单,但是动起手来,发现会有很多问题我们刚开始没有考虑到的。我们知道LINUX下的一种进程间通信叫共享内存,也就是使用mmap来实现。首先介绍一下mmap这个函数http://linux.die.net/man/2/mmap这个函数可以分为两种使用方式,一种是将文件映射,另一种就是内存映射。区别再于是否设置了MAP_ANONYMOUS,如果设置了这个flag,那么就意味

2011-10-24 14:52:44 736

原创 C内存分布

先看一下测试代码:#include #include int g_val;int g_ival = 5;char *g_ptr;char *g_iptr = "hongchunhua";static int s_val;static int s_iva

2011-10-10 17:36:45 715 4

原创 为什么netfilter规则对RAW socket不起作用?

使用的开源dhcp client代码,其中希望将dscp设置为0xC0,但是发现discovery包可以设置成功,但是renew数据包不能,查看代码发现discovery数据包是跑raw socket的,但是renew则是通过udp socket发送,查看内核代码发现raw so

2011-10-10 16:17:00 1594

原创 LINUX GCC下sizeof内存情况分析

情况:#include struct STR{ double a; int b; int c; char d;};struct STR1{ double a; char b; int c;};struct STR2{ char a

2011-10-09 16:01:23 1018 1

原创 TCP提供可靠性方式

1,  应用数据被分割成TCP认为最适合发送的数据块,UDP则对应用程序产生的数据报长度保持不变。TCP中最大报文段长度MSS,表示TCP传往另一端的最大块数据的长度。双方可以协商MSS,但是不能完全避免分片,因为中间某个路由器MTU更小。2,  TCP发送一个段

2011-09-14 15:30:12 584

原创 标准C库和unbuffered I/O

Unbuffered IO 指的是标准的文件IO,对应相反的是C标准IO库。Unbuffered IO每次都需要系统调用,所以在需要用户空间自己开辟IO缓冲区,C标准的IO则已经有相关管理,使用起来很方便。但是可能导致写入的数据和实际文件不一致,需要调用fflush刷写进去。

2011-09-14 15:25:12 652

原创 关于IP分片

物理介质上规定了MTU,最大传输单元,以太网一般为1500,所以如果UDP TCP等要发送数据超过这个数,那么就会进行分片。一般规定IP分片在目的端才进行重组。LINUX在开启netfilter时,是做重组的,而不是在目的端重组,重组函数为ipv4_conntrack_def

2011-09-14 11:06:59 1203

原创 简单介绍iptables和netfilter

一直以来都被什么表什么链搞的糊涂,今天终于整理清楚了。我们清楚的是iptables内置了几个table,也就是表,默认表有filter、nat和mangle,应该还有raw和security表。对应的是什么呢?就是netfilter中的enum nf_ip_hook_prio

2011-09-09 17:57:35 961

原创 二层接口ATM接口和ETH接口

从做大型防火墙到家用路由器CPE设备,最先迷糊的是这些网络接口,一下内容只是我的记录,不代表正确性。什么是ATM接口VPI 虚拟路径标识VCI 虚拟通路标示VPI和VCI是用于标示各ATM终端的标识ATM接口是一种底层的接口,其通过VP

2011-09-07 17:19:53 5474

翻译 第二部分 连接跟踪

并没有任何特定的先决条件。从2.6.23到2.6.25,API保持了极其的相识。在2.6.26(-rc1)中有一点点类型变化。Xtables-addons并没有提供包括连接跟踪在内的可移植的API,因为并没有模块的合入需要这个,但是编译系统还是非常方便的使用。6 nf_con

2011-09-06 11:48:55 4748 1

翻译 编写netfilter模块 第三部分 Netfilter核心

第三部分Netfilter核心10 Netfilter钩子函数网络代码中有若干调用是涉及到Netfilter的,并且所有的东西都和它绑定(也就是模块被加载)到netfilter框架中。最普遍的钩子组成部分是xtables(防火墙)、连接跟踪、IPv4的NAT引擎和IP

2011-09-05 15:12:46 1344

原创 Netfilter介绍

http://www.netfilter.org/index.html 包含的项目有iptables        用户空间命令程序,用于配置2.4 和2.6内核IPv4包过滤规则集。同时包含了地址转换配置规则集。Iptables源码包里还包括了ip6tables

2011-09-02 18:31:11 1573 1

原创 Linux进程内存映射

对于进程的内存映射,总是一知半解,记得几个月前面试一家公司问:画出linux下程序运行的内存映射图。来源:http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory

2011-09-01 17:09:39 547

原创 PPTP CLIENT

最近了解了一下pptp client的代码,简单记录一下,以防后面有用。按照流程,pptp client启动时,会启动pppd去创建新的ppp连接,并生成新的接口,例如ppp1。  大体的数据流程是,当创建了ppp1,同时可以配置路由,

2011-08-29 15:54:28 2413

原创 LINUX协议栈详解 ARP协议

ARP协议负责从IP地址到物理MAC地址的转换。ARP格式/* * This structure defines an ethernet arpheader. */ struct arphdr { __be16 ar_h

2011-07-28 18:29:01 1675

原创 LINUX协议栈详解 网桥介绍

1,  中继器 网桥 路由器中继器就是一个简单的数据拷贝,不对数据包进行任何改动。网桥负责连接两个局域网,负责将数据转发,不对数据包进行改动。路由器,处理L3的数据,一般都是IP数据包。2,  网桥实现上是一个混杂模式,任何一个数据包都有可能被收上来处理,也正是这样才能对数据进行

2011-07-20 14:17:35 1131 1

原创 LINUX协议栈详解 流控TC

在数据包发送一节提到了流控TC的实现,现在进一步研究。数据包发送是通过dev_queue_xmit实现的,if (q->enqueue) {                 rc = __dev_xmit_skb(skb, q, dev, txq);

2011-07-14 17:09:32 6766 1

原创 LINUX协议栈详解 协议处理

协议处理,主要介绍了从驱动中获取数据后,如何进行分发给不同的协议处理,包括IP协议、ARP协议等处理。__netif_receive_skb协议处理的开始,主要的数据结构是ptype_all和ptype_base,其中ptype_all是一个链表结构,ptype_base则是一个

2011-07-13 23:07:06 3508

原创 LINUX协议栈详解 数据包发送

数据包发送和接收有点类似,我们一般都用int dev_queue_xmit(struct sk_buff *skb)来发送数据包,例如我们自己构造完整的数据包,最后调用真正的物理发送函数。但是我们也知道发送也是有软中断处理的,open_softirq(NET_TX_SOFTIRQ

2011-07-12 19:16:59 1513

原创 LINUX协议栈详解 数据包接收

NAPI介绍NAPI混合了中断和轮询,在高负载情况下可以有效减少CPU的负载,从而提高性能,从这一点可以认识到一种优化的方式就是降低CPU负载,例如DMZ,就是另一个例子,将更多的工作交给其他硬件来执行,而不是CPU,从而达到减轻CPU压力。NAPI的原理:当内核正在处理接收数据

2011-07-12 18:14:45 1530

原创 CPU Scaling

<br /><br />CPU Scaling<br />1、performance 将cpu用于处于最高状态<br />2、powersave 将cpu设置为最低状态<br />3、userspace 手动设置cpu<br />4、ondemand 和 conservative都是内核自己cpu算法控制,不同的是ondemand是如果有负载,则直接升到高;conservative则step by step<br /> <br />如果编译成模块的,可以在/etc/modules添加达到boot的时候加载<

2011-05-11 19:46:00 1452

原创 计划2011-5

<br />1、学习走遍美国<br />2、看lwn.net内容<br />3、学习0bug,将几个重点的内容学习透彻<br />4、找一些面试之类的内容看看<br />5、工作内容

2011-05-09 17:03:00 306

原创 未来两年计划

<br /> <br />将这个blog归纳到面试宝典,呵呵,不过这里将会写下我未来两年的生活和工作的计划,今天是2011年5月9号,到2013年5月。<br /> <br />1、每天早上7点准时起床,学习英语10分钟<br />2、准时上班,每天上下班路上学习英语<br />3、积极工作,每天回来写工作总结,最重要的是列出所有需要学习的知识<br />4、坚持每天下班加会班<br />5、每天争取11点准时上床睡觉<br />6、每周六加班,当然可以睡迟点<br />7、周日陪女朋友,学习英语和锻炼身体

2011-05-09 16:43:00 469

原创 0bug

一、内存池 注册管理二、队列三、线程池四、任务池五、

2011-05-06 21:22:00 343

原创 Linux内核数据结构

<br /><br />链表<br />Linux内核中的链表是一个比较通用的,所以刚开始我看到时候不是特别习惯,和教科书上的都不一样,教科书上的是正向思维,就是有链表,然后怎么用。内核中的是有需求了,我们怎么构造链表,构造的链表怎么通用。这就是工作和学习的不同,最近一直找一些比较贴近实现的书,例如0bug,虽然很多人对其评价不太好,但我知道是很多c语言的书,评价很好,但是现实用的时候又有多少能用上?后面我会专门写一下0bug书上的东西。<br /><br /><linux/list.h><br />str

2011-05-06 21:15:00 388

原创 Linux内核设计与实现

<br />去南山书城看到linux内核设计与实现已经第三版了,翻开看看发现增加一章专门描述内核数据结构,详细描述中断处理程序和下半部机制。<br /> <br />一、温故而知新篇<br />1、fork和vfork<br />进程创建,在unix系统中,进程创建比较特别,分解为两个函数,分别为 fork和exec。首先,fork通过拷贝当前进程创建一个子进程,子进程与父进程区别仅仅在于一个pid,和某县资源和统计量,例如挂起的信号,它没有必要继承。exec函数负责读取可执行文件并将其载入地址空间运行。<

2011-05-06 10:30:00 390

原创 Android编译 & Linux内核编译

<br /><br />Android编译<br />一、 编译环境<br />1、 交叉编译<br />Android本身带有交叉编译工具,所以不需要单独配置。<br />2、 必要的JAVA环境<br />包括JDK等,具体可以参考google的android网站。<br /><br />二、 配置<br />1、 android功能配置<br />配置文件路径 vendor/rockchip/sdkDemo/BoardConfig.mk<br /><br />三、编译<br />make prebui

2011-04-26 22:17:00 795

原创 两年工作总结

从进sangfor的第一天就知道会有离开的一天,因为 I don't like it,我不喜欢做伪嵌入式,在学习一直学习嵌入式,可惜毕业第一份工并不是嵌入式的,或者说是伪嵌入式的,我想很多部门公司的同事应该都深有体会。总结一下吧,不要抱怨。听着静心的音乐,很轻松的回忆一下,在sangfor的两年,特别是最近一年,或者是最近三个月,给自己的教训是提高质量,除去外部因素,给自己一个教训,做事情要慢下来,把质量提高上去。嗯,还是分析一下总体的吧,我得到了什么?两年,我学会并实践了LINUX环境下的模块开发,了解了

2011-04-23 11:41:00 498

原创 嵌入式C语言总结

<br />这几天花了两天时间看了一些嵌入式C语言方面的内容,以下是一些读书笔记,记录一下。<br /> <br />中断服务程序<br />1、不能有返回值<br />2、不能向ISR传递参数<br />3、ISR尽可能的短<br />4、Printf有重入问题<br /><br /><br />硬件驱动模块<br />1、中断服务程序ISR<br />2、硬件初始化<br /><br /><br /> 内存操作<br /><br />1、某IO芯片被定为在CPU的存储空间而非IO空间,而且寄存器对应于某

2011-04-23 11:12:00 584

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除