linux 套接口文件_今天,告诉你,linux内核中进程,文件描述符,套接口的关系...

在前面我们说过,linux系统一切皆文件,网络编程,也可以像操作文件一样进行处理,当某个进程创建完套接口后,就可以通过文件描述符进行读写数据,因此linux内核就得提供,通过文件描述符来获取套接口的操作函数,而操作函数就是sockfd_lookup_light,函数如下所示:

ad6db1711d57bb8e2bf197dbe5fc9998.png

图1

参数解释如下:

fd: 文件描述符。

err: 错误的操作码,当函数执行出错时,将操作码放到err中,将其带回。

fput_needed:引用计数相关的参数。

462行: 调用fget_light内核函数,根据文件描述符fd获取文件描述符的结构指针struct file。

463-469:如果成功的返回了struct file指针,则根据file指针获取网络套接口sock,即 struct socket。

下面看看sock_from_file的实现:

284421194d3f4a1605f8b72d011318d8.png

图2

419行:根据文件操作表的函数指针来进行判断,如果file的文件操作表的指针是网络的文件操作表,则返回file->private_data的指针,因为,file->private_data的值是在sock_attach_fd函数中被设置的,这个不清楚的话,可以看我之前发的文章。

进程和文件描述符以及和套接口的关系,我给整理了一下结构图,如下所示:

956665aa2325a0ec62e127c4378ee104.png

图3

Linux内核中,是通过current->files->fd_array[fd]就可以访问当前进程fd所对应的文件描述符的实例,在struct file中,有两个成员是比较重要的,一个是private_data,一个是f_op,f_op指向了struct file_operations,对于网络文件描述符,这个结构里存的是网络的操作集合。

今天就写到这里吧,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值