转自: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

最新文章

  1. BZOJ 3894: 文理分科 [最小割]
  2. hadoop2.2编程:MRUnit测试
  3. Lvs原理
  4. D3.js 用层画条形图
  5. YII获取刚插入数据的id主键
  6. sgu 185 最短路建网络流
  7. CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
  8. 使用教程 - BestSync同步软件 - SQL2008R2 数据库定时备份解决方案
  9. 关于Oracle dmp文件导入随笔
  10. es3中使用es6/7的字符串扩展
  11. Python lambda 表达式有何用处,如何使用?
  12. nodejs-基础
  13. Swift中String和NSString的一个不同之处
  14. UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0xef in position 99: invalid continuation byte
  15. [转]git图解(3):分支操作
  16. JavaScript基础笔记(九)事件
  17. Flask--templates-多个模板文件,视图函数如何判断查询路径
  18. 前端vue框架 父组件与子组件之间的相互调用
  19. ccf--20151203--画图
  20. 软工实践第五次作业-WordCount进阶需求

热门文章

  1. Action Bar详解(二)
  2. 完整的MVC框架(前端、后台和数据库)
  3. [转]JAVA集合
  4. java平台利用jsoup开发包,抓取优酷视频播放地址与图片地址等信息。
  5. 如何干掉那些.ipch 与 .sdf文件
  6. c语言-01背包问题
  7. PHP中的多行字符串传递给JavaScript方法两则
  8. Hibernate quick start
  9. 格式转换至yuv422转 yuv420
  10. DRF 之 认证组件