- 博客(54)
- 资源 (5)
- 收藏
- 关注
原创 使用php模拟http请求
[code="php"]// Returns array with headers in $response[0] and body in $response[1]function http_post($request, $host, $path, $port = 80, $ip=null) { $http_request = "POST $path HTTP/1.0\r\n";...
2011-09-29 14:47:29
167
原创 fork函数
要理解fork(),首先需要懂得c程序和进程的概念:c程序组成部分如下:Text segment,正文段,由CPU执行的及其指令部分,可共享,通常是只读.Initialized data segment, 初始化数据段,包含程序中需要明确赋初值的变量.Uninitialized data segment, 非初始化数据段,对应于初始化数据段,又称bss段(block sta...
2011-04-28 13:36:12
169
原创 [转载]select 和 epoll
最近有朋友在面试的时候被问了select 和epoll效率差的原因,和一般人一样,大部分都会回答select是轮询、epoll是触发式的,所以效率高。这个答案听上去很完美,大致也说出了二者的主要区别。今天闲来无事,翻看了下内核代码,结合内核代码和大家分享下我的观点。一、连接数我本人也曾经在项目中用过select和epoll,对于select,感触最深的是linux下select...
2011-04-23 14:47:59
144
原创 [zz]POLL, SELECT & EPOLL 原理比较分析
因为需要了解底层设备访问的原理,所以惯用高层应用语言的我,需要了解一下Linux的设备访问机制,尤其是处理一组非阻塞IO的原理方法,标准的术语好像是叫多路复用。以下文章部分句子有引用之处,恕没有一一指出出处。 对于接触过Linux内核或设备驱动开发的读者,一定清楚poll和select系统调用,以及从2.5版本引入的epoll机制(epoll机制包含三个系统调用)。网上关于它们的文章,有说...
2011-04-23 11:48:23
103
原创 TCP连接和电话系统
建立TCP连接就好比一个电话系统[Nemeth 1997]。socket函数等同于有电话可用。bind函数是在告诉别人你的电话号码,这样他们可以呼叫你。listen函数是打开电话振铃,这样当有一个外来呼叫到达时,你就可以听到。connect函数要求我们知道对方的电话号码并拨打它。accept函数发生在被呼叫的人应答电话之时。由accept返回客户的标识(即客...
2011-04-21 14:45:21
179
原创 文本流与二进制流的区别
一、文本文件与二进制文件的定义大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。从上面可以看出文本文件基...
2011-04-19 20:30:07
274
原创 [zz]sql 百万级数据库优化方案
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select ...
2011-04-19 15:49:20
117
原创 Facebook的架构
从各种文章来源来看,我理解的Facebook架构如下1:web前端用PHP来写的。再用Facebook的HipHop转换成C++代码,使用g++编译。提供了一个高性能的模板系统和web逻辑执行层。2:业务逻辑使用Thrift做成服务。一些服务根据不同情况使用php,c++,java来实现。也有可能使用其他语言。3:用java写的服务没有使用一些企业级的框架服务。4:...
2011-04-19 10:34:48
282
原创 一切都是文件
处理器是文件,硬盘是文件,键盘是文件,鼠标是文件,电池也是文件。USB是文件,显示器是文件。对于linux kernel来说,所有硬件都被看做文件。你可以对他们进行读和写。这些硬件可以在/dev目录下找到虚拟文件。他们的状态被保存在/proc目录下。查看cpu$ cat /proc/cpuinfoprocessor : 0vendor_id ...
2011-04-17 21:48:35
179
原创 输出重定向
1.将标准输出重定向到log.txt文件中。命令举例:tree > log.txt #将当前的目录结构写入文件(此方式会覆盖原log.txt的内容,如果此文件不存在,则自动创建)tree >> log.txt #将当前的目录结构追加到文件结尾(此方式会将信息追加到log.txt的结尾,不会覆盖原文件的内容,如果此文件不存在,则自动创建)2.将标准输出和错误输出都重定向到log....
2011-03-31 15:25:43
216
原创 关于函数指针
函数指针 首先要理解以下三个问题:(1)C 语言中函数名直接对应于函数生成的指令代码在内存中的地址,因此函数名可以直接赋给指向函数的指针;(2)调用函数实际上等同于"调转指令+参数传递处理+回归位置入栈",[color=red][b]本质上最核心的操作是将函数生成的目标代码的首地址赋给CPU 的PC 寄存器[/b][/color];(3)因为函数调用的本质是跳转到某一个...
2011-03-29 09:25:17
105
原创 (zz)UNIX/LINUX 平台可执行文件格式分析
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF ...
2011-03-07 19:03:27
197
原创 ELF Section Header的结构
ELF Section Header的结构还是要从/usr/include/elf.h中看。[code="c"]typedef struct{ Elf32_Word sh_name; /* Section name (string tbl index) */ Elf32_Word sh_type; /* Section type */ Elf32_Word sh_fl...
2011-03-03 16:49:32
769
原创 关于目标文件的一些笔记
目标文件中的内容至少有编译后的机器指令代码、数据。除了这些内容以外,目标文件中还包括了链接时所须要的一些信息,比如符号表、调试信息、字符串等。一般目标文件将这些信息按不同的属性,以"节"(Section)的形式存储,有时候也叫"段"(Segment),在一般情况下,它们都表示一个一定长度的区域,基本上不加以区别,唯一的区别是在ELF的链接视图和装载视图的时候。程序源代码编译后的机器指令经常...
2011-03-01 17:19:11
119
原创 一个不用循环输出1到1000的方法
[code="c"]#include #include void main(int j) { printf("%d\n", j); (main + (exit - main)*(j/1000))(j+1);}[/code]解释:j因为是个参数,main函数在无参数调用时会被初始化为1,当j从1增长到1000的时候,j/1000会从0变为1,(exit - m...
2011-02-22 10:29:01
473
原创 动手写操作系统1
1:装好bochs2:装好nasm3:liux.asm[code="java"] org 0x7c00 ; BIOS自检完后将转到内存绝对地址7c00处继续执行 jmp _start_start: xor ax, ax ; make it zero mov ds, ax mov es, ax;; 设置BIOS输出的属...
2011-01-27 17:51:27
98
原创 [zz]C程序十诫
1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。 2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。 3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一时疏忽,致使数据类型向汝讨还血债。 4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不测降临汝...
2011-01-24 19:23:56
136
c语言函数的可变参数
在C语言中,有一个方法可以使用可变参数,可变参数是指,函数的有一些参数不是必要的。一些编程语言中,这些参数通常有一些默认值。比如C++中的可变参数[code="c"]int myFunc(int a, int b, int ab=0){ if (ab==0){ return a+b; }else{ return a+b+ab; }}[/code]在my...
2011-01-19 09:59:24
134
原创 Eval和Apply
Before we apply a function we must first evaluate its arguments.这一点常常是编程语言的神秘所在。在SICP的封面,EvalApply是被画作一个阴阳的图案。AlanKay说他可以在一页纸上写出最强大的编程语言,主要说的也是Eval和Apply。如果你觉得简单就是美,你完全可以定义一个图灵完备的语言,仅仅通过一个数组和“减1...
2011-01-03 09:00:57
639
原创 MTK编译出现Undefined symbol Image$$ZI$$Limit的问题解决
在编译MTK过程中,在链接过程中出现 Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o),Not enough information to produce a SYMDEFs file。通过MTK的LOG文件无法看出具体的错误信息,经查找是有些C的标准函数MTK上编译是可以通过,但是link阶段就会出错,如C...
2011-01-01 09:38:00
593
原创 很方便的删除svn文件
刚学会的一招SVN文件夹下会有许多.svn的“meta数据”。这些数据久而久之会带来不少麻烦。尤其是基于资源管理器交互的Windows系统,怎么样方便的删除svn文件呢今天看了Jon Galloway的一个注册表脚本,十分方便,分享如下:建立一个文本文件,取名为kill-svn-folders.reg(扩展名由txt改为reg),内容如下:[code="vbs"]Win...
2010-12-29 17:11:44
84
原创 结构化程序理论
结构化程序理论是程序设计语言理论的一个结果。他是说所有可计算函数都可以用三种方式组合子程序来实现。这三种控制结构是1:序列,执行一个子程序,然后执行另外一个子程序。2:分支,通过布尔变量的值选择执行两个程序中的某一个。3:重复,不断执行一个子程序,知道某个变量的值为true.计算机科学家大都认为这个理论是Corrado Böhm和 Giuseppe Jacopini 196...
2010-12-23 11:23:34
371
原创 使用yql过滤hacker news的信息
[code="sql"]select * from html where url="http://news.ycombinator.com/" and xpath='//tr/td/a[substring(@href,1,4)="http"][@href!="http://ycombinator.com"]'[/code][url]http://developer.yahoo.c...
2010-12-20 11:12:34
148
原创 龙树传
龙树入雪山,一老比丘以c,c++,java授之。龙树诵受爱乐,不日皆通。即起骄慢,自言:“C++中,津途甚多。编程虽妙,以理推之,故有未尽。未尽之中,可推而演之,以悟后学“。欲以无所推屈,表一切智相。菩萨见其如此,惜而愍之,即接入海,以Lisp无量妙法授之。龙树即得诸经一相,深入无生,三忍具足。...
2010-12-18 11:48:08
230
原创 计算一个位串后边有多少个0
[code="c"]unsigned int v; //算出v后面有多少个0int c; // c保存结果 // 比如二进制数1101000,c为3if (v){ v = (v ^ (v - 1)) >> 1; // 把c的后面的0都置为1,其他的置为0 for (c = 0; v; c++) { v >>= 1; }}...
2010-12-17 16:29:52
181
原创 不使用中间变量交换两个值
[code="c"]#define SWAP(a, b) ((&(a) == &(b)) || \ (((a) -= (b)), ((b) += (a)), ((a) = (b) - (a))))[/code][code="c"]#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= ...
2010-12-17 16:20:53
69
原创 计算一个位串中1的个数
[code="c"]unsigned int v; //计算 v中1的个数unsigned int c; // 结果存在cfor (c = 0; v; c++){ v &= v - 1; }[/code]这是Brian Kernighan给出的算法,v中有多少个1就迭代多少次。这在1988年出版的K&R C语言教程的2-9练习中出现。2006年4月19日,Knut...
2010-12-17 16:05:22
194
原创 按mask合并两个位串
[code="c"]unsigned int a; unsigned int b; unsigned int mask; // 如果是1则从b里选,否则从a里选。.unsigned int r; r = a ^ ((a ^ b) & mask); [/code]
2010-12-17 15:51:48
133
原创 不用分支指令计算一个整数的绝对值
分支指令的代价高,所以尽量避免使用。跟r = (v < 0) ? -(unsigned)v : v相比,下面的指令数是差不多的,但是更快。[code="c"]int v; //找出v的绝对值unsigned int r; // 保存结果 int const mask = v >> sizeof(int) * CHAR_BIT - 1;//CHAR_...
2010-12-17 14:28:27
261
原创 计算一个整数的符号
[code="c"]int v; // 找出v的符号int sign; // 保存结果// CHAR_BIT 是一个字节的位数,一般为8.sign = -(v < 0); // 如果v < 0 则 -1, 否则为 0. // 或者, 为了避免使用分支指令,标志寄存器 (IA32):sign = -(int)((unsigned int)((int)v) >>...
2010-12-17 14:19:24
269
原创 c语言解析json数据
我使用的是cJSON:[url]http://sourceforge.net/projects/cjson/[/url]先看json的数据结构c中没有对象,所以json数据是采用链表存储的[code="c"]typedef struct cJSON { struct cJSON *next,*prev; // 数组 对象数据中用到 struct cJSON *child...
2010-12-17 11:25:09
348
原创 判断一个数是否2的幂的技巧
设要判断的数是无符号整数X。 首先判断X是否为0,如果为0则不是2的n次幂,返回。X和X-1进行按位与操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2 的n次幂。证明:如果是2的n次幂,则此数用二进制表示时只有一位是1,其它都是0。减1后,此位变成0,后面的位变成1,所以按位与后结果是0。如果不是2的n次幂,则此数用二进制表示时有多位是1。减1...
2010-12-16 10:23:19
233
原创 MTK 的一些笔记(zz)
L4是MMI/AT和协议栈的适配层。ATCI是AT命令解析器。UEM是用于抽象如键盘、LED、通用输入/输出等基本设备,是用户设备模块。PHB就是电话本。SMU是安全管理单元(SIM、STK)。CSM是呼叫服务管理。RAC是登记访问控制。SMSAL是SMS应用层。内核服务包括定时器、任务管理和进程间通信、资源和内存管理、日志和异常处理。OSL是封装OS API的...
2010-12-14 17:22:58
174
原创 MTK在modis模拟器上http访问网络的设置
在mtk平台上调试http联网,可以在“网络服务”里进行必要的设置才可以。(1)网络服务->网际网络服务(2)网际网络服务->设置(3)设置->设置档(4)进入你激活的设置档,然后查看(编辑)设置档,然后选择连接类型为“http”(5)确定,会进入代理服务器的设置界面,将“使用代理服务器”设置为否。(6)保存,退出,应该就可以联网了。...
2010-12-14 10:07:25
226
原创 MTK如何设置音量
MTK中设置音量的方法和获取小区id类似,都是mmi发送一个消息到l4c,然后调用相应的回调函数处理。[code="c"]void SetVolumeLevelReq(volume_type_enum volume_type,U8 volume_level){ MYQUEUE Message; mmi_eq_set_volume_req_struct *setVolumeL...
2010-12-13 17:03:02
505
原创 MMI 和L4通信
1.1. 如何通信[code="c"]Send/Receive messages thru the message Queue.#define OslMsgSendExtQueue msg_send_ext_queue#define OslReceiveMsgExtQ receive_msg_ext_qSetProtocolEventHandler(Fu...
2010-12-13 15:49:11
213
原创 一个标准的HTTP请求实例
GET /ga.js HTTP/1.1\r\nHost: www.google-analytics.com\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)\r\nAccept: */*\...
2010-12-10 16:55:03
262
原创 MTK中怎样创建和使用lib
方法0:MTK平台如何生存LIB库文件:1. make 文件夹建立需要生成库的mylib,放入c和h文件,单独编译mylib模块2. make文件中COMPLIST加入mylib3. 在REL_MMI_GPRS.mak中CUS_REL_MTK_COMP加入mylib4. 在mtklib文件夹里面放mylib,就ok啦。方法一:MTK生成库(ARM) 过程第一步,...
2010-12-09 10:59:23
235
原创 MTK资源管理notes
MMI字符串资源的加入:1)在ref_list.txt中加入字符串。2)把字符串ID加入到ID枚举中。3)使用ADD_APPLICATION_STRING2来加入字符串。4)使用GetString()获得字符串。5)使用APP_BASE来保证字符串ID的唯一性。图片资源的加入:1)把图片加入应用程序目录。2)把图片ID加入枚举类型中。3)使用ADD_...
2010-12-09 10:23:39
133
web caching
2009-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人