linux内核网络源码-用户空间与内核的接口

ops/2024/10/18 16:55:32/

内核通过各种不同接口内部信息输出用户空间除了程序用于请求特定信息经典系统调用还有三个特殊接口其中两个虚拟文件系统

procfs 文件系统

这是一个虚拟文件系统通过proc ,允许内核文件形式用户空间输出内部信息这些文件并没有实际存在磁盘中但是可以通过catmore以及 shell重定向予以写入这些文件甚至可以真实文件一样指定访问权限因此创建这些文件内核组建可以说明任何一个文件可由读取或者写入目录则不能写入多数linux发行套件默认内核都支持procfs.procfs不能编译成为模块配置菜单相关的内核选项Filesysrtem=>pseudo filesystem=?proc file system support

sysctl

接口允许用户空间读取修改变量不能用接口每个内核变量进行操作内核明确指出那些变量从此接口可见用户空间你可以用两种方式访问sysctl输出变量一种sysctl系统调用另一种procfs内核支持procfs会在/proc添加一个特殊目录/proc/sys每个sysctl输出内核变量引入一个文件

procps 随附sysctl命令用于配置sysctl接口输出变量命令通过写入/proc/sys内核对话多数linux发行套件默认内核都支持sysctlsysctl不能编译成为一模块配置菜单中相关内核选项General setup-> Sysctl support

sysfs

procfssysctl已经滥用多年这就导致引入一种文件系统sysfssysfs 非常干净组织方式输出很多信息如你期望当前sysctl输出部分信息可以移植sysfs 内核sysfs支持只是2.6版本开始多数linux发行套件默认内核都支持sysfssysfs不能编译成为一个模块配置菜单相关内核选项Gernal setup _. configure standard kernel features 选项才能看得到上述选项

O Reilly最新linux设备驱动程序》书中可以找对应sysfs 详尽分析十七章我们将看到桥接代码如何使用sysfs

你也可以使用下列接口命令传给内核配置或者某事配置内容

ioctl 系统调用操作对象是一个文件通常用于实现特殊设备所需但是标准文件系统没有提供操作你可以socket系统调用返回套接字描述符传给ioctl而这也是忘了代码使用ioctl方式接口也是老一代命令所用ifconfigroute

netlink套接字

这是网络应用程序内核通信最新的首选机制IPROUTE2大多数命令使用此接口linux而言, netlink 代表的就是BSD世界中路由套接字多数网络内核功能都可以用Netlink或者ioctl接口进行配置因为内核支持比较新配置工具以及老式工具

profssysctl

procfssysfs 输出内核内部信息但是prcfs 主要是输出只读数据大多数sysctl 信息都是写入但是只有超级用户写入

输出只读数据而言procfssysctl之间选择依赖于多少信息应该输出与一个简单内核变量或者数据结构相关一些文件可以用sysctl输出其他涉及更为复杂数据结构而且需要特殊格式就可以procfs输出例如缓存统计数据。

profs

大多数网络功能在其初始化都会/proc注册一个或者多个文件不是引导就是模块加载当一位用户读取文件引起内核间接运行一组内核函数返回某种输出内容网络代码注册文件位于/proc/net

/proc 目录可以使用Proc_mkdir创建/proc/net文件可以使用定义Include/linux/proc_fs.h proc_net_fops_createproc_net_remove 予以注册除名

两个函数都是包裹函数其中含有通用APIcreate_proc_entryremove_proc_entry 特别是proc_net_fops_create负责创建文档 proc-net_create 然后初始化文件操作处理函数我们看一个实例

以下ARP协议如何/proc/net注册arp文件

static struct file_operations arq_seq_fops =

{

.owner = THIS_MODULE,

.open = arq_seq_open,

.read = seq_read,

.llseek = seq_lseek

.release = seq_release_private

}

static int __init arq_proc_init(void)

{

if (!proc_net_fops_create("arp", S_IRUGO, &arq_seq_fops))

return 0;

}

proc_net_fops_craete 三个输入参数可知文件名arq权限必须指定为只读

而且文件操作处理arq_seq_ops, 当一个用户读取文件时使用file_operations 数据结构允许procfs返回相当多数据用户数据一群相同类型对象组成会很有用例如ARQ缓存返回一次返回一项路由表返回时一次返回路径

open所初始化例程会做另一次重要初始化注册一个函数指针数组包括procfs用于便利传回用户数据所有例程一个例程启动另一个推进到一个项目另一个倾卸以一个项目这些例程内部负责保存必要环境信息这些信息就是倾泄以及正确位置重新继续倾斜所必需

static struct seq_operations arq_seq_ops = {

start = clip_seq_start

next = neigh_seq_next

stop = neight_seq_stop

show = clip_seq_show

};

static int arq_seq_open(struct inode *inode, struct file *file)

{

rc = seq_open(file, &arq_seq_ops);

}


http://www.ppmy.cn/ops/15685.html

相关文章

武汉星起航:深耕亚马逊,一站式孵化新手,开启跨境新篇章

在全球经济一体化的时代背景下,跨境电商行业以其独特的优势,正成为推动经济增长的新引擎。武汉星起航电子商务有限公司,作为一家专注于自营亚马逊跨境电商及亚马逊卖家孵化服务的公司,凭借创始人张振邦先生深厚的电子商务运营经验…

最新版两款不同版SEO超级外链工具PHP源码

两款不同版SEO超级外链工具PHP源码,可根据个人感觉喜好自行任意选择不同版本使用(版V1或版V2)。 外链工具只是网站推广的辅助工具,一般适用于短时间内无法建设大量外链的新站,新站应坚持每天做一到两次为宜&#xff0…

java8 最简单的将字符串写入文本的方式

文章目录 简要说明maven依赖样例代码 简要说明 java8 最简单的将字符串写入文本,并指定编码格式 maven依赖 无样例代码 try {// 使用Java 8的NIO包写入文件,并指定编码为 fileCharsetPath path Paths.get(destPath);Files.write(path, "your St…

Hive主要介绍

Hive介绍 hive是基于 Hadoop平台操作 HDFS 文件的插件工具 可以将结构化的数据文件映射为一张数据库表 可以将 HQL 语句转换为 MapReduce 程序 1.hive 是由驱动器组成,驱动器主要由4个组件组成(解析器、编译器、优化器、执行器) 2.hive本身不…

K8s: 集群内Pod通信机制之DNS

集群内Pod通信机制之DNS Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS 1 ) DNS 概述 可以使用附加组件 为 Kubernetes 集群设置 DNS 服务支持群集的 DNS 服务器(例如 CoreDNS)监视 Kubernetes API 中的新服务,并…

【Vue】Vue中使一个div铺满全屏

在Vue中实现div全屏铺满的方式与纯CSS实现类似&#xff0c;只是在Vue组件中应用CSS的方式略有不同。 最近在项目开发中&#xff0c;就遇到了这个问题&#xff0c;特此记录一下&#xff0c;方便大伙避坑。 有这么一段代码&#xff1a; <template><div class"fu…

医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。 在医学影像中,噪声可能来源于多个方面,包括成像设备的电子系统、患…

Vue-条件渲染(初识vue渲染)

目录 一、Vue条件渲染-介绍 1.概念 2.特点 3.功能 4.好处 5.应用 二、Vue条件渲染-使用 1.初识渲染 2.条件v-if的使用 3.条件v-if-else的使用 4.条件v-else-if使用 5.template元素使用 6.条件渲染-阶段案例 7.条件v-show 三、Vue条件渲染-实例 1.权限管理系统 …