proc文件系统:1.proc文件系统简介


一、proc文件系统简介

1.是个虚拟文件系统

虚拟在:

  • 无物理介质:保存系统当前工作的特殊数据,但不存在于任何物理设备中
  • 数据是映射:对其进行读写时,才根据系统中的相关信息即时生成;或映
    射到系统中的变量或数据结构

既然是文件系统,那么它就有一样的性质:

  • 挂接目录点:/proc
  • 其内文件仍可以像一般文件:cat查看,echo输入
  • 但其内的文件不可以像一般文件增删,比如mkdirrm等命令都不行。得用规定的函数搞定。

2.作用

/proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息

在这里插入图片描述
含义:

  • 蓝色的数字文件夹:那是当前运行的进程号对应的

下面是一些重要的文件:

  • /proc/cpuinfo:CPU 的信息 (型号, 家族, 缓存大小等)
  • /proc/meminfo:物理内存、交换空间等的信息
  • /proc/mounts:已加载的文件系统的列表
  • /proc/devices:可用设备的列表
  • /proc/filesystems:被支持的文件系统
  • /proc/modules:已加载的模块
  • /proc/version:内核版本
  • /proc/cmdline:系统启动时输入的内核命令行参数

在这里插入图片描述

3.函数接口

  • 文件结点:struct proc_dir_entry
  • 创建目录函数proc_mkdir()proc_mkdir_data()
  • 创建符号链接函数proc_symlink()
  • 创建proc文件函数proc_create()proc_create_data()
  • 删除proc节点(文件目录都能删)函数remove_proc_entry()

(1)结点

proc文件之所以不能用一般的文件操作搞,是因为它有着特殊的结点(目录或文件),这些文件结点构成proc文件系统。

struct proc_dir_entry是proc文件系统的重要结构体,定义在fs/proc/internal.h中。
在这里插入图片描述

(2)创建目录函数

struct proc_dir_entry *proc_mkdir(
	const char *name,
	struct proc_dir_entry *parent
)
  • name:要创建的目录名称
  • parent:父目录,如果为NULL,表示直接在/proc下面创建目录
struct proc_dir_entry *proc_mkdir_data(
	const char *name, 
	umode_t mode, 
	struct proc_dir_entry *parent, 
	void *data
)
  • name:要创建的目录名称
  • mode:指定要创建目录的权限
  • parent: 父目录,如果为NULL,表示直接在/proc下面创建目录
  • data:保存私有数据的指针。NULL(不需要);PDE_DATA(获取proc_mkdir_data传入的私有数据)。

PS:proc_mkdir和proc_mkdir_data的区别在于他不能保存私有数据指针。

(3)创建符号链接函数

struct proc_dir_entry *proc_symlink(
	const char *name, 
	struct proc_dir_entry *parent, 
	const char *dest
)

作用:该函数在parent目录下创建一个名字为name的符号链接文件,链接的目标是dest。

参数:

  • name:要创建的符号链接名称
  • parent:要创建的符号链接文件所在的父目录,如果为NULL表示直接在/proc下面创建
  • dest:所要创建的符号链接指向的文件名。

PS:该函数在用户空间等效为ln -s dest name

(4)创建proc文件函数

struct proc_dir_entry *proc_create(
	const char *name, 
	umode_t mode, 
	struct proc_dir_entry *parent, 
	const struct file_operations *proc_fops
)

参数:

  • name:要创建的文件名称
  • mode:指定要创建文件的权限
  • parent: 父目录,如果为NULL表示直接在/proc下面创建
  • proc_fops: proc文件相关的操作函数
struct proc_dir_entry *proc_create_data(
	const char *name, 
	umode_t mode, 
	struct proc_dir_entry *parent, 
	const struct file_operations *proc_fops, 
	void *data
)

参数:

  • name:要创建的目录名称
  • mode:指定要创建目录的权限
  • parent:父目录,如果为NULL表示直接在/proc下面创建
  • proc_fops:proc文件相关的操作函数
  • data:保存私有数据的指针,如不需要则设为NULL。

PS:proc_create和proc_create_data的区 别在于他不能保存私有数据指针。

(5)删除proc节点函数

void remove_proc_entry ( 
	const char *name, 
	struct proc_dir_entry *parent
)

作用:该函数将删除一个proc节点,文件和目录都能删。

参数:

  • name:要删除的文件或者目录名。
  • parent:符号所在的目录,如果为NULL,表示在/proc目录下
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值