Linux2.6 内核中结构体初始化(转载)
转自:http://hnniyan123.blog.chinaunix.net/uid-29917301-id-4989879.html
在Linux2.6版本的内核中,我们经常可以看到下面的结构体的定义和初始化。这在以前的C语言书中是极少见到的。下面的一个结构体来自到Linux内核中的一部分。在这个结构体中我们可以看到有普通的整型变量,也有函数的指针。
struct net_proto_family {
int family;
int (*create)(struct net *net, struct socket *sock,
int protocol, int kern);
struct module *owner;
};
而在内核中可以使用下面的方法进行初始化。
static const struct net_proto_family netlink_family_ops = {
.family = PF_NETLINK,
.create = netlink_create,
.owner = THIS_MODULE, /* for consistency 8) */
};
下面是使用上面的结构体的一个小程序,其中还有结构体中的另外一种应用:
#include <stdio.h>
#define PF_ID 10 enum
{
ID1 = ,
ID2,
ID3,
}; char *message = "message";
int create(int fd,char *name)
{
if(fd == )
{
printf ("I am create fd = %d,name = %s\n",fd,name);
}
return ;
} int output (int fd,char *name)
{
printf("I am output fd =%d,name = %s\n",fd,name);
return ;
} int output_2 (int fd,char *name)
{
printf("I am output_2 fd = %d,name = %s\n",fd,name);
} struct test_1
{
int (*output)(int fd,char *name);
}; struct test
{
int id;
char name[];
int (*print)(int fd,char *name);
}; static struct test des ={ .id= PF_ID,
.name ="frank",
.print = create,
}; struct test_1 table[] = {
[ID1] = {.output = output},
[ID2] = {.output = output_2},
}; int main()
{
printf("des.PF_ID=%d\n",des.id);
printf("des.message= %s\n",des.name);
des.print(PF_ID,message);
table[ID2].output(PF_ID,"table ID2");
table[ID1].output(PF_ID,"table ID1");
}
这里有一篇分析Linux内核这种数据结构比较详细的文章。
http://blog.csdn.net/mociml/archive/2009/08/13/4443280.aspx
Linux2.6 内核中结构体初始化(转载)的更多相关文章
- Linux C中结构体初始化
在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated in ...
- C语言结构体初始化方法
早上苏凯童鞋问我这个问题来着,写在这里. 我了解到的C中结构体初始化的方法大概有三种. 如这里我定义了一个结构体: typedef struct node { int x, y; }Node; 第一种 ...
- 关于c语言中结构体的初始化
1.先定义结构体类型后再定义结构体变量: 格式为:struct 结构体名 变量名列表: struct book s1,s2,*ss://注意这种之前要先定义结构体类型后再定义变量: 2.在定义结构体类 ...
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- Linux C 结构体初始化三种形式
最近看linux代码时发现了结构体 struct 一种新的初始化方式,各方查找对比后总结如下: 1. 顺序初始化教科书上讲C语言结构体初始化是按照顺序方式来讲的,没有涉及到乱序的方式.顺序初始化str ...
- Linux下C结构体初始化[总结]
1.前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { int a; int b; }d ...
- Linux下C结构体初始化
1.前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { int a; int b; }d ...
- Linux内核kobject结构体分析
1.前言 Linux内核中有大量的驱动,而这些驱动往往具有类似的结构,根据面向对象的思想,可以将共同的部分提取为父类,而这个父类就是kobject,kobject结构体中包含了大量设备的必须信息,而三 ...
- Go语言中结构体的使用-第2部分OOP
1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...
随机推荐
- 汉澳sinox通过ndis执行windows驱动程序
汉澳sinox不仅能通过wine执行windows应用程序.还能通过ndis执行windows驱动程序 汉澳sinox使用 Windows NDIS 驱动程序 详细实现方法是用ndisgen把wind ...
- C# UserControl 判断是否是设计模式中
In Windows Forms application, we can use Control.IsInDesignMode or LicenseManager.UsageMode == Licen ...
- [转]java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- 转: 工欲善其事,必先利其器系列--Netbeans之远程开发
转自: http://www.cnblogs.com/zuoca/archive/2012/07/09/Remote_Development_With_Netbeans_origin.html 工欲善 ...
- 仿MIUI音量变化环形进度条实现
Android中使用环形进度条的业务场景事实上蛮多的,比方下载文件的时候使用环形进度条.会给用户眼前一亮的感觉:再比方我大爱的MIUI系统,它的音量进度条就是使用环形进度条,尽显小米"为发烧 ...
- SolidEdge 工程图中如何快速将同一类元素放到同一个图层
在图层选项卡中新建一个尺寸线图层 点击聪慧选项(把它点凹下去),然后点击任意尺寸线,弹出聪慧选取选项,点击确定,则自动选择了所有尺寸线 点击移动图元,把刚才选中的所有尺寸线都移动到这个图层即可 ...
- HTML的常用标签和表格
拼接多个网页
- ubuntu git ssh不通
xyh@ubuntu-64:~$ ssh -v git@danxinben.com ...
- Python 005- 使用Pyecharts来绘制各种各样的图形
本文转载自:https://blog.csdn.net/qq_39143076/article/details/79065448,如有侵权,请联系删除啊 如何做Python 的数据可视化? pyech ...
- sim的准确识别技术
几个月钱,我换了一个手机,本着工科男动手能力强的原则,自己用✂️把sim卡剪成了一个小卡,然后成功的可以使用了. 然而就在昨天,我将卡拿出之后,再放回去,却无法识别我的sim卡了. 我上网查了方法,怀 ...