linux 下的ioctl简介

这几天有时间看了一下《深入理解linux网络系统内幕》,有关于ioctl部分和大家分享一下。

ioctl说白了就是用户通过调用ioctl函数可以修改驱动相关的东西,函数原型如下:

 int ioctl(int handle, int cmd,[int *argdx, int argcx]);

如我们使用ifconfig eth0 mtu 1250 这样的命令,用来改变接口eth0的MTU是,ifconfig会打开一个套接字(socket),再初始化一个本地的数据,如ifreq data,应用层代码如下代码如下:

struct ifreq data;
fd = socket(PF_INET, SOCK_DGRAM, 0);
<... 对data的初始化...>
err = ioctl(fd, SIOCSIFMTU, &data);

在内核层里面,会有几个不同的地方处理iotcl命令,具体代码在net/socket.c里面。根据icotl cmd参数不同跳转到不同的处理函数中,如SIOCSIFMTU是在dev_ioctl 分支中进行实现,下图为具体的ioctl不同的分派。

如我们的SIOCSIFMTU调用的是dev_ioctl 函数,根据这个函数流程就可以找到设置MTU具体的实现函数

关于ioctl命令列表是在include/uapi/linux/sockios.h里面。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值