首页 国际新闻正文

头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团

在之前的文章中,咱们介绍了VFS、VFS与进程模块之间的代码剖析,也剖析了devtmpfs文件体系。

本次咱们介绍socketfs文件体系,阐明下socketfs与vfs之间的相关。

在剖析VFS以及剖析devtmpfs时,其文件体系变量file_system_type->mount接口完成超莉莉卡奥特曼级块的创立以及根目玩女生录相关的dentry、inode的创立,在root_inode的i_op接口中,完成了文件及目录inode创立的接口(i_op->mkdir完成目录的创立、i_op->create完成文件的创立)。而针对socket而言,其并不需要创立实在的文件,因而,其root_inode的i_op接口中并没有mkdir、create接口,其首要将进程描述符的struct file类型的指针与socket相关的结构体相关。

关于sockfs文件体系的剖析主题,首要剖析如下几个方面的内容:

一、sockfs文件体系类型的界说、注册及挂载

二、sockfs相关的结构体

三、socket fd创立的进程

四、socket相关的体系调用扼要介绍

五、socket的ioctl处理流程

  1. ioctl的处理流程

2头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团. ifconfig up/down

一、sockfs文件体系类型的界说及注册任小务

针对sockfs,其在sock_init接口中,进行文件体系的注册以及挂载操作,sock_init的接口流程图如下:

经过调用register_filesystem完成文件体系的注册(文件体系的注册之前文章中现已介绍过,可在此处检查)。

其注册流程相对比较简略,而关于文件体系注册相关捐精护理的阐明,可参阅之前的文章,链接如下:LINUX 文件体系剖析之文件体系注册与挂载相关的剖析

sockfs文件体系变量的界说

sockfs文件体系的界说如下xcs联赛,其mount接口为sockfs_mount

static struct fi流光飘动全文阅览梅子le_syst油亮丝袜em_type so霸宠奴妃ck_fs_type = {
.name = "sockfs",
.mount = sockfs_mount,
.kill_sb = kill_anon_super,
};

针对sockfs,调用kern_mount进行sockfs的挂载操作,而kern_mount经过调用vfs_kern_mount进行挂载(但没有调用do_add_mount,将该sockfs挂载到详细目录中,因sockfs无需挂载详细目录)。在vfs_kern_mount->mount_fs->type->mo暖色军婚unt时,即调用sockfs_mount接口,进行超级块、根root、根dentry相关的创立及初始化操作。如下接口界说,其间sockfs_ops为sockfs的超级块变量相关的操作接口,而sock董伽豪fs_dentry_operations为sockfs的根dentry的操作接口。

static struct dentry *sockfs_mount(struct file_system_type *fs_type,
int flag头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团s, const char *dev_name, void *data)
{
return mount_pseudo(fs_type, "socket:", &sockfs_ops,
&sockfs_dentry_operations, SOCKFS_MAGIC);
}

socketfs 超头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团级块的操作接口,首要包含:

  1. inode节点的创立接口sock_alloc_inode;
  2. inode节点的删去接口sock_destroy_inode;
  3. 文件体系的状况获取接口simple_statfs,可获取文件体系的类型、块巨细、文件体系称号巨细等
static const struct super_operations sockfs_ops = {
.alloc_inode = sock_alloc_inode,
.destroy_inode = sock_destroy_ino喜欢我心爱的姐姐de,
.statfs = simple_statfs,
};
str张乐泉uct socket_alloc {
struct socke龙加天t socket;//struct socket socket变量,用于表明socketfs模块相关的变量,依据该变量可完成对socket链接的树立、数据收发等操作。
struct inode vfs_inode;//inode节点变量
};

下面略微阐明下alloc_inode接口,在介绍该接口之前引进结构体struct socket_alloc,该结构体中包含了vfs模块的inode和socket模块的socket变量,可以说该变量链接了VFS与SOCKETFS模块。

下面咱们剖析下so头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团ck_alloc_inode函数,该函数也便是创立struct socket_alloc类型的指针变量,并对该变量中的inode树木游水的力气与socket变量,详细功能为:

1.初始化socket变量的状况、flag、ops、sk、file等成员变量;

2.初始化socket的等候行列成员变量wq

static struct inode *sock_alloc_inode(struct super_block *sb)
{
struct socket_alloc *ei;
火辣妹struct socket_wq *wq;
ei = kmem_cache_alloc(sock_inode_cachep, GFP_KERNEL);
if (!ei)
return NULL;
wq = kmalloc(sizeof(*wq), GFP_KERNEL);
if (!wq) {
kmem_cache_free(sock_inode_cachep, ei);
return NULL;
}
init_waitqueue_head(&wq->wait);
wq->fasync_list = NULL;
RCU_INIT_POINTER(ei->socket.wq, wq);
ei->socket.state = SS_UNCONNECTED;
ei->socket.flags = 头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团0;
ei->socket篆颉尊.ops = NULL;
ei->socket.sk = NULL;
ei->socket.file = N头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团ULL;
return &ei->vfs_inode;
}

而针对dentry的处理操作接口sockfs_dentry_operations,则供给了so头晕恶心想吐是怎么回事,LINUX 套接字文件体系(sockfs)剖析之一 文件体系注册剖析,太阳海贼团ckfs_dname接口,该接口用于生成dentry的称号

static const 茅于轼事情始末struct dentry_operations sockfs_dentry_operations 宣传部长陈灵= {
.d_dname 妖蛊降= sockfs_dname,
};

本末节首要介绍socketfs文件体系的注册,并介绍了socketfs的inode节点的创立等内容,介于咱们之前已剖析了文件体系注册的接口,因而针对socketfs文件体系的注册剖析,相对来说简略了许多。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。