2014年3月20日

动态选路协议

摘要: http://www.cppblog.com/aurain/archive/2008/08/21/59542.html 阅读全文

posted @ 2014-03-20 16:41 程良 阅读(101) 评论(0) 推荐(0) 编辑

2014年3月18日

linux下C编程初篇

摘要: 对于程序设计员来说,makefile是我们绕不过去的一个坎。可能对于习惯Visual C++的用户来说,是否会编写makefile无所谓。毕竟工具本身已经帮我们做好了全部的编译流程。但是在Linux上面,一切变得不一样了,没有人会为你做这一切。编代码要靠你,测试要靠你,最后自动化编译设计也要靠你自己。想想看,如果你下载了一个开源软件,却因为自动化编译失败,那将会在很大程度上打击你学习代码的自信心了。所以,我的理解是这样的。我们要学会编写makefile,至少会编写最简单的makefile。 首先编写add.c文件,#include "test.h" #include int 阅读全文

posted @ 2014-03-18 22:26 程良 阅读(193) 评论(0) 推荐(0) 编辑

linux & windows下的动态库制作

摘要: 动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。 那么,在Linux上动态库是怎么生成的呢?#include "test.h" int add(int a, int b) { return a.. 阅读全文

posted @ 2014-03-18 22:24 程良 阅读(429) 评论(0) 推荐(0) 编辑

linux下静态库的制作

摘要: 在我们编写软件的过程当中,少不了需要使用别人的库函数。因为大家知道,软件是一个协作的工程。作为个人来讲,你不可能一个人完成所有的工作。另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把时间浪费在这些重复的工作上面。 既然说到了库函数,那么一般来说库函数分为两种方式:静态库和动态库。两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中的。怎么理解呢?也就是说,对于最后的执行文件而言,你是否删除静态库无所谓。但是,一旦你删除了动态库,最后的执行文件就玩不转了。 今天我们讨论的问题是静态库。为了显示windows和linux创建静态库之... 阅读全文

posted @ 2014-03-18 22:23 程良 阅读(414) 评论(0) 推荐(0) 编辑

2014年3月15日

ICMP协议

摘要: 1 // ICMP header 2 typedef struct _tagX_icmphdr 3 { 4 unsigned char i_type; //类型 5 unsigned char i_code; //代码 6 unsigned short i_cksum; //检验和 7 unsigned short i_id; //标识符 8 unsigned short i_seq; //序列号 9 unsigned long i_timestamp;//当前时间 =(unsigned long)::GetTick... 阅读全文

posted @ 2014-03-15 17:06 程良 阅读(2372) 评论(0) 推荐(0) 编辑

ARP:地址解析协议

摘要: 我们假设这样一个场景:你需要和你网络中的一个设备进行通信,这个设备可能是某种服务器。你用来创建这个通信的应用已经得到了这个远程主机的ip地址,也意味着系统已经有了用来构建它想要在第三层到第7层传递数据包所需要的信息。这时它所需要的唯一的信息就是第二层包含目标主机MAC地址的数据链路层数据。之所以需要MAC地址,是因为网络中用于连接各个设备的交换机使用了内容寻址寄存器(CAM),这个表列出了它在每一个端口所有连接设备的MAC地址。当交换机收到了一个指定MAC地址的流量,它会使用这个表,来确定应该使用哪个端口发送流量。如果目标的MAC地址是未知的,这个传输设备会首先在它的缓存中查询这个非地址,如果 阅读全文

posted @ 2014-03-15 11:09 程良 阅读(452) 评论(0) 推荐(0) 编辑

Linux下的Shell工作原理

摘要: Linux下的Shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序。它的执行过程基本上按如下步骤: (1)读取用户由键盘输入的命令行。 (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式。 (3)终端进程调用fork( )建立一个子进程。 (4)终端进程本身用系统调用wait4( )来等待子进程完成(如果是后台命令. 阅读全文

posted @ 2014-03-15 11:08 程良 阅读(1322) 评论(2) 推荐(0) 编辑

2014年3月14日

自然对齐/指定字节对齐---个人笔记

摘要: 关于字节对齐,有时候真的不是很清楚,每个编译器都有自己的规定,而大多数都遵循自然对齐:就是取该数据结构中所占内存空间最大的那个变量对齐(先检查占内存较大的那个的大小,而其后的变量则向其靠齐)typedef struct aa{ char a; short b; }_aa;_aa A;A.a='1';A.b=7788;sizeof(A)? 答案为4.他们怎么存放的?小端模式下: --------0x0 a | '1'|0x1 b | 88 |0x2 | 77 |0x3 | * | --------那么这个呢?typedef struct _aa{ char ... 阅读全文

posted @ 2014-03-14 17:24 程良 阅读(503) 评论(0) 推荐(0) 编辑

offsetof宏---个人笔记

摘要: 标准库里面提供的offsetof(t,m)宏,用来计算两个变量在内存中的地址偏移量#include //原型:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)/*#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)对这个宏的讲解我们大致可以分为以下4步进行讲解:1、( (TYPE *)0 ) 0地址强制 "转换" 为 TYPE结构类型的指针;2、((TYPE *)0)->MEMBER 访问TYP 阅读全文

posted @ 2014-03-14 17:01 程良 阅读(332) 评论(0) 推荐(0) 编辑

sizeof()和 strlen()的区别 --- 个人笔记

摘要: 在学习C语言和linux的时候,遇到了一些常见问题、题目,有些很简单,有些容易出错,本人水平有限,未免会出错,今天有时间,就将以前做的笔记,一一拿出来,写写blog。sizeof()和 strlen()的区别? 首先sizeof()是C语言提供的一个运算符,不是函数!它的作用主要是获得一个类型 或者一个对象里面内容的空间大小。 strlen()是一个标准库函数函数,用于计算一个字符串的长度,但是不把字符 '\0'计算在内。如char *buf="hello,world"strlen(buf)=11 sizeof(buf)=4 看看:sizeof( 2 + 3 阅读全文

posted @ 2014-03-14 16:51 程良 阅读(418) 评论(0) 推荐(0) 编辑

导航