代码改变世界

linux进程和线程

2009-11-05 15:35 by cesc711, 196 阅读, 0 推荐, 收藏, 编辑
摘要:这两天一直在看linxu进程和线程的东西,总是效率比较低,这么一点基础的东西还看了这么久。该自我反省一下。首先来看看进程。进程分为三个部分,进程控制块,程序段和数据段。进程是一个有生命的实体,程序是一个没有生命的实体。只有CPU赋予程序生命的时候,程序才成为一个活动的实体,我们称之为“进程”。每一个进程都有自己的地址空间。一般包括文本区(代码区),数据区,堆栈。文本区存储程... 阅读全文

项目开发过程中出现的错误二

2009-11-02 14:54 by cesc711, 180 阅读, 0 推荐, 收藏, 编辑
摘要:昨天在调试程序的时候出现了一个问题,有这样一个结构体:[代码]在sizeof的时候,一直以为结果会是16,但是没想到结果却是20,一下子有点糊涂。后来才知道是由于内存没有对齐的问题,于是在网上找了些资料看看。对于struct和union来说,第一个成员位于offset为0的位置。以后的每一个成员的偏移量,必须是以下两个数中比较小的那一个,第一个是#pragma pack(n),这个是编译器的一个预... 阅读全文

项目开发过程中出现的错误一

2009-10-30 01:50 by cesc711, 164 阅读, 0 推荐, 收藏, 编辑
摘要:前天出现了一个比较低级的失误,记录如下:本来想要绑定端口6666,于是用了 htonl(6666)。这样把6666当成了一个32位的无符号整数。也就是 00000000,00000000,00011010,00001010转换成网络字节序就变成了00001010,00011010,00000000,00000000。但是sockaddr_in结构中的sin_port是usigned short i... 阅读全文

netfilter与用户空间通信

2009-10-21 13:34 by cesc711, 944 阅读, 1 推荐, 收藏, 编辑
摘要:在做p2p流控的时候,学习到了linux用户空间与内核通信的方法。在http://www.ibm.com/developerworks/cn/linux/l-netlink/index.html一文中详细介绍了几种方法。我们的内核态环境是有用户上下文的,所以采用的是copy_from_user()/copy_to_user()方法实现内核态和用户态的数据拷贝。但是这两个函数会引发阻塞,所以只能用在... 阅读全文

static 函数

2009-10-13 21:06 by cesc711, 408 阅读, 0 推荐, 收藏, 编辑
摘要:今天看代码的时候看见如下形式:[代码]以为返回的是一个static值,后来才知道原来是声明该函数是个static类型的函数,意义为该函数只能在本文件之内使用。后来又进一步看了一下static关键字的用法,现在自己总结一下,希望能对记忆有帮助。static的用法有两种,分为面向过程的用法和面向对象的用法。上面我所遇到的问题即为面向过程的用法。面向过程的static用法:1.静态全局变量:静态全局变量... 阅读全文

ipv4和tcp报头数据格式

2009-10-13 16:32 by cesc711, 1609 阅读, 0 推荐, 收藏, 编辑
摘要:IPv4 (Internel协议)头部[代码]iphdr->version:版本(4位),目前的协议版本号是4,因此IP有时也称作IPv4。iphdr->ihl:首部长度(4位):首部长度指的是IP层头部占32 bit字的数目(也就是IP层头部包含多少个4字节 — 32位),包括任何选项。由于它是一个4比特字段, 因此首部最长为60个字节。普通IP数据报(没有任何选择项)字... 阅读全文

linux字节序转换函数和地址转换函数

2009-10-12 20:09 by cesc711, 3512 阅读, 0 推荐, 收藏, 编辑
摘要:刚才阅读代码的时候看到了一个字节排序函数,一时想不起具体用法了。想想学习linux下的网络编程也不少时间了,这些字节排序和转换的函数还是不太清楚,容易混淆。今天索性把这方面的知识汇总一下,争取以后能够熟练的认识和运用。字节顺序函数:小端字节序:将低序字节存储在起始地址。(linux)大端字节序:将高序字节存储在起始地址。(网络字节序)举个例子:对于整数0x12345678来说,在不同的系统中存放的... 阅读全文

linux netfilter

2009-10-12 01:11 by cesc711, 1422 阅读, 1 推荐, 收藏, 编辑
摘要:netfilter 是一种内核中用于扩展各种网络服务的结构化底层框架。netfilter的设计思想是生成一个模块结构使之能够比较容易的扩展。新的特性加入到内核中并不需要从新启动内核。这样,可以通过简单的构造一个内核模块来实现网络新特性的扩展。给底层的网络特性扩展带来了极大的便利,使更多从事网络底层研发的开发人员能够集中精力实现新的网络特性。netfilter有4大特性:1. 每一个协议定义"hoo... 阅读全文

集线器,交换机和路由器

2009-05-22 22:14 by cesc711, 267 阅读, 0 推荐, 收藏, 编辑
摘要:集线器 集线器实际就是一种多端口的中继器。集线器一般有4、8、16、24、32等数量的RJ45接口,通过这些接口,集线器便能为相应数量的电脑完成“中继”功能(将已经衰减得不完整的信号经过整理,重新产生出完整的信号再继续传送)。由于它在网络中处于一种“中心”位置,因此集线器也叫做“Hub”。 它的工作原理很简单,比如有一个具备... 阅读全文

java随机数的产生

2009-05-19 10:47 by cesc711, 465 阅读, 0 推荐, 收藏, 编辑
摘要:昨天在写程序的时候用random类来产生随机数,但是发现每次产生出的随机数都是一样的,为此困惑不已。后来在网上查了查,发现是配置文件里面所配置的seed造成的,每次都用一个seed,产生的随机数当然就一样了。 下面很简单的总结一下java中产生随机数的几个方法,当然也是网上看到的: 1.用System.currentTimeMillis()获取一个当前时间毫秒的long型数字。 2.用Math.r... 阅读全文