socket()接口与内核协议栈的挂接
2014-01-10 15:54
134 查看
最近在看Brdige的代码,发现一个问题,同样的调用ioctl接口实现添加网桥、删除网桥、网桥增加网卡、网桥删除网卡等操作,一个应用层的接口,却通过两条路径实现,sock_ioctl和RTNETLINK(这本就不是一个级别的东西),而应用层的brctl-utils源码中并没有直接使用PF_NETLINK协议簇的情况,让我感到非常奇怪,因此想把glibc到系统调用,到协议簇注册,以及和VFS的关系再理一下。
这篇博客主要分析框架和流程,对于一些具体的细节,并不取讨论。所谓框架,指关键的数据结构、操作以及逻辑分层。此篇博客耗时12小时。
1、socket()到系统调用
Linux下,用户空间的调用的socket()接口由glibc实现,man socket如下,三个参数domain,type和protocol:
1
2
3
4
5
6
7
NAME
socket - create an endpoint for communication
SYNOPSIS
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
libc实现系统调用同名函数通常使用INT 0x80 + 系统调用号的方式陷入内核,一般来说,read对应sys_read,write对应sys_write.但是,socket系列却不是这样,为了节约系统调用号,将所有的
这篇博客主要分析框架和流程,对于一些具体的细节,并不取讨论。所谓框架,指关键的数据结构、操作以及逻辑分层。此篇博客耗时12小时。
1、socket()到系统调用
Linux下,用户空间的调用的socket()接口由glibc实现,man socket如下,三个参数domain,type和protocol:
1
2
3
4
5
6
7
NAME
socket - create an endpoint for communication
SYNOPSIS
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
libc实现系统调用同名函数通常使用INT 0x80 + 系统调用号的方式陷入内核,一般来说,read对应sys_read,write对应sys_write.但是,socket系列却不是这样,为了节约系统调用号,将所有的
相关文章推荐
- jsp中页面间传汉字参数转码的方法
- 如何添加swap分区
- 为 Key-Value 数据库实现MVCC 事务
- vim格式化html代码
- JQuery实现页面的表格数据的增加与分页
- Sitemesh入门
- MYSQL中replace into的用法
- 邮件服务相关
- 面向对象和面向过程的粗浅理解
- HDU-2188 悼念512汶川大地震遇难同胞——选拔志愿者
- XMPPElementReceipt wait return,
- 前端开发人员应该知道的60件事
- MapReduce算法 – 反转排序(Order Inversion)
- 十步完全理解SQL
- Spring下ActiveMQ的xml配置
- 分页类的封装
- Android-java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.pr
- 自己动手写分词引擎——逆向最大、正向最大、双向最大分词算法的实现
- 关于实仓与虚仓和调拨单和虚仓调拨单的区别
- phpExcel导出excel的类,每步都有说明