免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3412 | 回复: 1
打印 上一主题 下一主题

如何知道 linux 内核源码里注册的回调函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-22 22:22 |只看该作者 |倒序浏览
linux 网络源代码用到了大量的回调函数,有时找不到这些回调函数的注册地方,无法进一步跟踪下去,例如 net.c文件:

static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
{
    //....

    default:
        err = sock->ops->ioctl(sock, cmd, arg); // 该处的ioctl函数具体调用的是哪个函数?

    // ...
}

论坛徽章:
0
2 [报告]
发表于 2011-05-22 23:25 |只看该作者
本帖最后由 奇门遁甲-lu 于 2011-05-22 23:28 编辑

先确定socket属于哪个协议族。,然后去源码看。
例如,PF_UNIX 族的类型SOCK_STREAM,那么ioctl就应该在af_unix.c
会看到
static const struct proto_ops unix_stream_ops = {
    ......
   .ioctl =        unix_ioctl;
    ......
};
这么个结构。
相应的yyy协议族就在af_yyy.c,有类似结构
static const struct proto_ops  yyy_ops = {
    ......
   .ioctl =        yyy_ioctl;
    ......
};
很有规律的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP