linux中用户和内核空间的交互接口汇总

内核提供接口给用户空间程序,便于用户进行进行信息的读取和配置。

procfs和sysctl都可以导出内部信息,其中procfs主要用于导出只读信息,sysctl导出可写的。此外还有sysfs,ioctl

1.   procfs

procfs是内核提供的,一种在用户空间中对各种子系统的设置进行配置的方式,通常挂载在/proc下。

 网络代码注册的文件位于/proc/net目录中

2.   sysctl系统调用

sysctl接口允许用户读取或者修改内核参数。可以通过sysctl命令导出变量,如果内核支持procfs,会在/proc下创建sys文件,sysctl命令也是通过/proc/sys目录下的文件与内核通信的。现在发行版本一般都支持,如果没支持的那肯定是古董版本。

       例如进制转发IP数据包,可以设置如下:

echo 1 > /proc/sys/net/ipv4/ip_forward

       将1写入到了文件,后续将不再支持IP转发。也可以通过程序调用系统调用sysctl来实现。

3.   sysfs

sysfs是linux2.6提供的虚拟文件系统,设计之初是用于对设备和驱动信息导出到用户空间名称叫做driverfs,后来代码更新“失控”,发现也能支持其他子系统,变成了sysfs,挂载在/sys中。

4.   ioctl系统调用

ioctl 系统调用可以操作一个文件,用于实现特殊设备的操作。也可以操作套接字描述符,例如net-tools工具包。

5.   netlink

netlink套接口是网络应用程序与内核通信的接口,IPROUTE2包中的大多数命令都使用这个接口。使用也比较简单,可以通过套接口标准的API来打开、关闭。

关于netlink可以参考《linux中通用Netlink详解及使用剖析(附源码)》

猜你喜欢

转载自blog.csdn.net/notbaron/article/details/80443250