- 博客(11)
- 资源 (7)
- 收藏
- 关注
转载 __attribute__
<br />GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。<br />__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。<br />__attribute__语法格式为:<br />__at
2010-12-28 10:25:00 447
原创 queue.h usage
<br /> queue.h usage<br /> /*<br /> * TAILQ example program.<br />*/<br />#include <stdlib.h><br />#include <stdio.h><br />/*<br /> * On many OpenBSD/NetBSD/FreeBSD you could include <sys/queue.h>, but<br /> * for portability we’ll include the local copy.<
2010-12-23 19:24:00 814
原创 对一个结构体取下标
<br /> <br /> <br />如下:<br /><br /> wh = (struct ieee80211_frame *) skb->data;<br /> frm = (u_int8_t *)&wh[1];<br /><br /><br />wh是一个指针<br />frm = wh + sizeof(struct ieee80211_frame) <br />&wh[1] 即frm是wh偏移这一段结构体大小size后的地址。<br /> <br />这是一种写代码的技巧,在协议相关代码里
2010-12-23 19:21:00 2059
原创 Linux内核中结构体的特殊初始化方法
<br />在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .n
2010-12-19 09:13:00 1208 1
原创 结构体内的#define宏定义
<br />关于宏的作用域<br />1. 宏没有可见域。<br /> 如果说有,那就是从本文件(包括被包含的文件)中,该宏定义处开始,至文件的尾部或取消宏(#undef)为止。<br />2. 考虑一种特殊情况:<br /> 一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?)<br /> 定义在
2010-12-18 23:29:00 18262 3
转载 Madwifi 整理
//hardware:wireless chip ar9132<br /> // software: "LSDK-WLAN-ap81fus-7.1.2.32.tgz" supported by atheros<br /> //20080303 init<br /> 一, 关键结构体变量<br /> ath_ar_ops<br /> net80211_ops<br /> ar5416hal<br /><br /> (struct ath_softc_net80211)->sc_ops = ath
2010-12-17 17:20:00 2707
原创 ioctl 学习之路 (3)
<br />一般的说,,用户空间的IOCTL系统调用如下所示: ioctl(int fd, int command, (char *) argstruct)因为这个调用拥有与网络相关的代码,所以文件描述符号fd就是socket()系统调用所返回的,而command参数可以是/usr/include/linux/sockios.h头文件中的任何一个,这些个命令根据它可以解决的问题所涉及的方面被分为多种的类型.<br /> 比如:<br /> 改变路由表(SIOCADDRT, SIOCDELRT)<br /
2010-12-10 18:13:00 699
转载 ioctl 学习之路 (2)
<br />我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl, 所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。<br />一、 什么是ioctl。<br />ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:<br />int ioctl(int fd, ind cmd
2010-12-10 17:45:00 719
原创 ioctl 学习之路 (1)
<br /><br />设备文件应该表现物理设备。大多物理设备既作为输出也作为输入,因此必须有某个机制使内核中的设备驱动程序得到来自进程的输出以便发送到设备。通过为输出打开设备文件并向其写而做到这个,就像写一个普通文件。在下面的例子中,这是用 device_write 实现的。<br />这不总是足够的。想象你有一个串行口连接到一个调制解调器(即使你有一个内置的调制解调器,从CPU的观点看它仍然是通过串行口连接到调制解调器,因此你不必责备你的想象力)。自然而然的事情是使用设备文件向调制解调器写(要么是调制解
2010-12-09 16:48:00 1581
原创 proc文件系统与ctl_table
<br />三、系统参数数据结构的组织 <br /><br /><br /><br />系统参数的数据结构是按层次结构进行组织的,最高一层是root,下面的一层依次 <br /><br />kernel、net、proc、fs、debug、dev。它们下面再分层,例如net下面又分为core <br /><br />、ipv4等,这样依次类推,直到最底层。 <br /><br />树中各个层次的结点,不管是父结点还是子结点,都用一个结构ctl_table组成的数 <br /><br />组来表示。所有的系统
2010-12-06 14:13:00 7129
原创 alloc_skb()
<br /> <br />sock_alloc_send_pskb() --> alloc_skb()<br /><br /> alloc_skb()用于分配缓冲区的函数。由于"数据缓冲区"和"缓冲区的描述结构"(sk_buff结构)是两种不同的实体,这就意味着,在分配一个缓冲区时,需要分配两块内存(一个是缓冲区,一个是缓冲区的描述结构sk_buff)。<br /><br />/usr/src/linux-2.6.19/include/linux/skbuff.h<br />static inline
2010-12-01 11:18:00 1833
Linkers and Loaders 链接器和加载器
2017-12-07
Draft P802.11ax_D1.0
2017-12-07
CWNA官方学习指南 第3版 认证无线网络管理员PW0-105 完整版.z02
2017-12-07
CWNA官方学习指南 第3版 认证无线网络管理员PW0-105 完整版.z01
2017-12-07
Sybex.CWNA.Official.Study.Guide.CWNA-106
2017-12-07
Sybex.CWAP.Official.Study.Guide.Exam.PW0-270.Mar.2011
2017-12-07
YouMoney(有钱记账)一个python写的开源的个人记账程序
2010-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人