自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(57)
  • 资源 (2)
  • 收藏
  • 关注

转载 strtoul

unsigned long int strtoul(const char *nptr,char **endptr,int base); strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字

2011-03-27 15:00:00 512

转载 string 处理函数 strtok

语法: #include char*strtok(char*str1, constchar*str2 ); //注意const char *str2,必须定义为 str[],定义 cha *str2会出错。strtok 函数返回str1中下一个标记(token),而str2中包含分隔符来决定标记。如果没有发现标记strtok返回NULL。 为了将字符串转换成标记,第一次调用strtok应该将str1指向要标记的字符串。之后所有的调用应该将 str1 设置为 NULL。 例如: char str[]="no

2011-03-26 15:37:00 332

原创 low level I/O和stream I/O

<br /><br />stdin和STDIN_FILENO的区别:<br /> <br />层次不一样。STDIN 属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等,在 <stdio.h>。<br />STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。在 <unistd.h>。<br />标准库内封

2011-03-26 11:39:00 660

转载 二级指针和二维数组

<br />级指针和二维数组之间关系的理解.<br />我们知道char array[]=”abcdef”;   array是数组的首地址,<br />那么在二维数组中array当然也是数组的首地址,<br />看看这个定义char Array[][3] ={“ab“,“cd“,“ef“};<br />怎么知道的呢?定义这样一个数组,在vc调试窗口中<br />我们看到:<br />Array ---------0x64324234<br />  |------Array[0]---0x64324234 “

2011-03-16 18:14:00 3364

转载 offsetof

<br />offsetof  :<br />    Retrieves the offset of a member from the beginning of its parent structure.<br />size_t offsetof(structName, memberName);<br />Parameters:<br />    structName : Name of the parent data structure.<br />    memberName :Name of the

2011-03-08 11:26:00 330

原创 htonl inet_addr inet_ntoa struct sockaddr_in struct in_addr struct sockaddr

<br />现在我们很幸运,因为我们有很多的函数来方便地操作 IP 地址。没有 必要用手工计算它们,也没有必要用"<<"操作来储存成长整字型。<br />首先,假设你已经有了一个sockaddr_in结构体ina,你有一个IP地址"132.241.5.10" 要储存在其中,你就要用到函数inet_addr(),将IP地址从 点数格式转换成无符号长整型。使用方法如下:<br />ina.sin_addr.s_addr = inet_addr("132.241.5.10");<br />注意,inet_addr

2011-02-19 15:13:00 986

原创 临时1

#include // void perror(const char *msg);#include // char *strerror(int errnum);#include //errnoerrno 是错误代码,在 errno.h头文件中;perror是错误输出函数,输出格式为:msg:errno对应的错误信息(加上一个换行符);strerror 是通过参数 errnum (就是errno),返回对应的错误信息。int snprintf(char *str, size_tsize, const c

2011-02-18 11:21:00 266

转载 Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )

<br />sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在<include/linux/skbuff.h>中定义,并包含很多成员变量供网络代码中的各子系统使用。 <br />这个结构在linux内核的发展过程中改动过很多次,或者是增加新的选项,或者是重新组织已存在的成员变量以使得成员变量的布局更加清晰。它的成员变量可以大致分为以下几类: <br />Layout 布局<br />General 通用<br />Feature-specific功能相关Ma

2011-02-16 14:53:00 319

转载 sk_buff完全注释(skbuff.c)

<br />/*<br /> * sk_buff 完全注释<br /> * 金伟注释 blog -- http://jinweidavid.cublog.cn 转载请注明<br /> */<br />/*<br /> * 本文件取自linux 2.6.13内核的skbuff.c<br /> */<br />/*<br /> * Routines having to do with the 'struct sk_buff' memory handlers.<br /> *<br /> * Authors: A

2011-02-15 17:45:00 596

原创 临时

在kernel声明空间并赋值。 char *mem; mem = kmalloc(size, GFP_KERNEL); memcpy(mem,source,size); kfree(mem); 不然会出错。 定义枚举类 /*********************************/ typedef enum _IW_TYPE { IW_POINT_TYPE=0, IW_PARAM_TYPE, IW_FREQ_TYPE, } IW_TYPE;

2011-02-15 11:18:00 436

原创 cred and current API

<br /> <br /> <br />#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,28)<br />         orgfsuid = current->fsuid;<br />         orgfsgid = current->fsgid;<br />         /* as root */<br />         current->fsuid = current->fsgid = 0;<br /> #else<br />   

2011-01-26 17:03:00 531

转载 arm-linux-gcc安装

<br /><br />太郁闷了,装了n次,总忘记配置文件名,每次都要上网搜,做个备份吧<br /> <br />1 解压<br />法1:右键直接解压<br />法2:tar zxf arm-linux-gcc-4.3.2<br />法3: 什么什么 -C 下次补充<br /> <br />2 拷贝,拷贝到哪都可以,但是为了表示玩的专业,最好拷贝到   /usr目录下<br />把解压出来的文件夹下面的arm 拷贝到 /usr/local   下<br />法1:sudo cp arm /usr/lo

2011-01-20 17:10:00 373

转载 Linux网络设备驱动程序体系结构(写得很好)

<br />从上到下:网络协议接口层-->网络设备结构层-->设备驱动实现层-->网络设备与媒介层<br /> <br />记忆方法:<br />分三层,1、最上面理解为我们用的网络传输方法,就是网络协议,2、最下面就是物理硬件,即网络设备层,3、中间是一层,设备驱动,然后拆成2部分,上部分是结构(层),下部分是结构中函数的实现(层)。<br /> <br />功能描述:<br />网络协议接口层<br />dev_queue_xmit() 发送数据, netif_rx() 接收数据。<br />网络设备结

2011-01-20 17:09:00 2506

转载 Introduction To Multicast (MAC multicast写得很好)

<br />原文:<br />http://www.firewall.cx/multicast-intro.php<br /> <br /> <br />To understand what we are going to talk about, you must be familiar with how MAC addresses are structured and how they work. The MAC Addresses page i

2011-01-20 09:59:00 826

转载 dev_alloc_skb(len+16) skb_reserve(skb,2) skb_put(skb,len)

/**  *      dev_alloc_skb - allocate an skbuff for receiving  *      @length: length to allocate  *  *      Allocate a new &sk_buff and assign it a usage count of one. The  *      buffer has unspecified headroom built in. Users should allocate  *    

2011-01-20 09:03:00 1243

原创 workqueue tastlet kerneltimer BUG_ON

workqueue#include struct work_struct {              unsigned long pending;               struct list_head entry;                  /* 将任务挂载到queue的挂载点 */               void (*func)(void *);                   /* 任务方法 */               void *data;              

2011-01-20 00:23:00 506

原创 le32_to_cpu and cpu_to_le32

<br />Then when do we use le32_to_cpu( ) , and when do we use cpu_to_le32( )? <br /> > <br /> > The names tell it. le32_to_cpu is used for convesions from 32bit little <br /> > endian data into CPUs endianness, cpu_to_le32 is used for convesions f

2011-01-19 17:05:00 2131 1

原创 C运算符优先级

<br />iNIC_PRIVATE *pAd<br />struct racfghdr *p_racfgh;<br /> p_racfgh = (struct racfghdr *)&pAd->RaCfgObj.packet[ETH_HLEN];<br /> <br />这里将packet的地址 强行类型转换为 struct racfghdr *,再赋值给 p_racfgh<br /> <br />优先级<br />运算符<br />名称或含义<br />使用形式<br />结合方向<br />说明<b

2011-01-19 13:45:00 310

原创 get interface HW address

1. in userspace use ioctl/*************some error in code***********************/static int __init getmac_init() {         int sock_id;         struct ifreq ifr;         char *macstr = "";         unsigned char *mac = "";         memset(&ifr,0,sizeof

2011-01-19 11:06:00 541

原创 va_list and vsnprintf

<br />man vsnprintf<br /> NAME<br /> printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,<br /> vsnprintf - formatted output conversion<br /><br /> SYNOPSIS<br /> #include <stdio.h><br /><br /> int printf

2010-12-28 09:42:00 934

转载 set_fs get_fs

<br />其实内核里面也可以用系统调用的,直接用read/write是可以的。但要注意几个问题: <br /> 一个是要记得编译的时候加上-D__KERNEL_SYSCALLS__ <br /> 另外源文件里面要#include   <linux/unistd.h> <br /> 如果报错,很可能是因为使用的缓冲区超过了用户空间的地址范围。一般系统调用会要求你使用的缓冲区不能在内核区。这个可以用set_fs()、get_fs()来解决。在读写文件前先得到当前fs: <br /> mm_

2010-12-08 17:58:00 1244

转载 set_fs get_fs

<br />其实内核里面也可以用系统调用的,直接用read/write是可以的。但要注意几个问题: <br /> 一个是要记得编译的时候加上-D__KERNEL_SYSCALLS__ <br /> 另外源文件里面要#include   <linux/unistd.h> <br /> 如果报错,很可能是因为使用的缓冲区超过了用户空间的地址范围。一般系统调用会要求你使用的缓冲区不能在内核区。这个可以用set_fs()、get_fs()来解决。在读写文件前先得到当前fs: <br /> mm_

2010-12-08 16:21:00 341

转载 指针函数和函数指针有什么区别

<br />指针函数和函数指针有什么区别 <br /><br /> 1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示: <br /><br /> 返回类型标识符 *返回名称(形式参数表) <br /> { 函数体 } <br /><br /> 返 回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本

2010-11-25 15:15:00 265

转载 differ的用法

diff <br />diff 就是用在比对两个档案之间的差异的,一般是用在 ASCII 纯文字文件的比对上。 我们先预处理一下一个档案好了。假设我要将 /etc/passwd 的内容,将第四行删除, 第六行则取代成为『no six line』,新的档案放置到 /tmp/test 里面, 那么应该怎么做? <br />[root@linux ~]# mkdir -p /tmp/test <br />[root@linux ~]# cat /etc/passwd | / <br />> sed -e '4d'

2010-11-19 10:40:00 1808

转载 va_list va_start vsprintf

<br /><br />/*  基本过程:<br />      va_list arglist; //声明一个变量来转换参数列表<br />  va_start(arglist,format); //初始化变量<br />  va_end(arglist); //结束变量列表,和va_start成对使用<br />  可以根据va_arg(arglist,type)取出参数 其中type可以是int,char等等<br />或  va_start(arglist, format);<br />     s

2010-11-18 11:46:00 304

转载 SKB_BUFF整理笔记

<br /><br />一. SKB_BUFF的基本概念<br />1. 一个完整的skb buff组成<br />(1) struct sk_buff--用于维护socket buffer状态和描述信息<br />(2) header data--独立于sk_buff结构体的数据缓冲区,用来存放报文分组,使各层协议的header存储在连续的空间中,以方便协议栈对其操作<br />(3) struct skb_shared_info --作为header data的补充,用于存储ip分片,其中sk_buff

2010-11-09 12:32:00 885

转载 sk_buff完全注释(skbuff.c)

/* * sk_buff 完全注释 * 金伟注释 blog -- http://jinweidavid.cublog.cn 转载请注明 *//* * 本文件取自linux 2.6.13内核的skbuff.c *//* * Routines having to do with the 'struct sk_buff' memory handlers. * * Authors: Alan Cox  * Florian La Roche  * * Version: $Id: skbuff.c,v 1.90 200

2010-11-08 21:19:00 1291

转载 不同情况下构造skb数据包的实现

<br /><br />在我这个网络接口的程序中(can0),其实难点就是怎样组包。怎样在原来数据包的基础加上自己的数据,怎样构造ip头,怎样构造udp头。<br />调试了两个星期,终于是调通了,在这个过程中,通过看内核源代码和自己组包的尝试,大概对组包的方法有了些了解,记录在此,留做备忘,也希望能给需要这方面信息的朋友一点帮助吧。<br />1,正常网卡收到数据包后的情况:<br />她的工作就是剥离mac头,然后给一些字段赋值,最后调用netif_rx将剥离mac头后的数据报(比如ip数据包)发送到上

2010-11-08 21:16:00 412

原创 dev_hold

<br />dev_hold 和 dev_put, 可以用来增加和递减net_device 的使用计数的.<br />linux可以使用dev_get_by_name函数取得设备指针,但是使用是需要注意,使用过dev_get_by_name函数后一定要使用dev_put(pDev)函数释放设备引用,不然可能导致GET的设备无法正常卸载。<br /> 

2010-11-08 20:44:00 1981 1

转载 C运算符优先级

优先口决 括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四; //这个"余"是指取余运算即% 移位五,关系六; //移位运算符:> ,关系:> = (指针型结构成员)┃ 最高 ────────────────────────────┃ ↑ !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址)┃ │ ────────────────

2010-10-25 15:25:00 231

原创 Read-copy-update (RCU)

<br />1. If you were relying on interrupts being disabled within an<br />interrupt handler (which they are -not- in -rt), then you would<br />either need to add some form of local_irq_save() or, as you say,<br />go to the rcu_read_lock() and synchronize_rc

2010-10-22 13:14:00 390

原创 struct net (network namespace)

<br />35 struct net { 36atomic_tcount; /* To decided when the network37 * namespace should be freed.38 */39 #ifdef NETNS_REFCNT_DEBUG 40atomic_tus

2010-10-22 11:31:00 1544

原创 常用查资料网站

<br />http://lwn.net/<br />http://lxr.oss.org.cn

2010-10-22 11:01:00 358

转载 等待队列

<br />问题:进程是如何组织起来的?<br />我们知道,进程是有很多种状态的:include/linux/sched.h<br />#define TASK_RUNNING        0<br />#define TASK_INTERRUPTIBLE    1<br />#define TASK_UNINTERRUPTIBLE    2<br />#define __TASK_STOPPED        4<br />#define __TASK_TRACED        8<br />/*

2010-10-20 22:48:00 1073

转载 内核中的原子上下文

<br />内核的一个基本原则就是:在中断或者说原子上下文中,内核不能访问用户空间,而且内核是不能睡眠的。也就是说在这种情况下,内核是不能调用有可能引起睡眠的任何函数。一般来讲原子上下文指的是在中断或软中断中,以及在持有自旋锁的时候。内核提供了四个宏来判断是否处于这几种情况里:<br />#define in_irq() (hardirq_count()) //在处理硬中断中<br />#define in_softirq() (softirq_count()) //在处理软中断中<br /

2010-10-20 19:41:00 464

转载 daemonize

<br /><br />linux-2.4.20/kernel/sched.c start from line 1283:<br /><br />/*<br />* Put all the gunge required to become a kernel thread without<br />* attached user resources in one place where it belongs.<br />*/<br /><br />void daemonize(void)<br />{<br

2010-10-20 11:08:00 299

转载 Linux 2.4.x内核同步机制

同步通常是为了达到多线程协同的目的而设计的一种机制,通常包含异步信号机制和互斥机制作为其实现的底层。在Linux 2.4内核中也有相应的技术实现,包括信号量、自旋锁、原子操作和等待队列,其中原子操作和等待队列又是实现信号量的底层。 等待队列和异步信号 wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。我们从它的使用范例着手,看看等待队列是如何实现异步信号功能的。 在核心运行过程中,经常会因为某些

2010-10-20 10:28:00 189

转载 kernel_thread

<br />kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的完成。 <br />kthread_create是比较正牌的创建函数,这个不必要调用daemonize,用这个创建的kernel thread都挂在了kthread线程下。<br />从表面上来看,这两个函数非常的类似,但是实现却是相差甚远。<br />kthread_create是通过work_queue来实现的,kern

2010-10-19 23:38:00 355

原创 Linux内核中读写文件数据的方法

<br />有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/<br />有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函

2010-10-19 16:16:00 318

原创 current task_struct

18 #define currentget_current()20 static inline struct task_struct *get_current(void) 21 { 22         return current_thread_info()->task; 23 }

2010-10-19 15:44:00 490

网络工程师考试大纲与培训指南(2009版)

最近要考09年的5月的计算机网络工程师,找了点资料。我自己组织了一下,方便大家下载

2009-04-11

3G手机编程与游戏开发

3G手机编程与游戏开发,适合J2ME学习手机开发初级者,包括基础入门,图形用户界面设计篇,手机信息管理篇,网络数据传输篇等等

2008-12-16

空空如也

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

TA关注的人

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