Linux proc文件系统

1. 什么是proc文件系统?

proc文件系统是一种虚拟文件系统,利用它可以实现linux内核空间和用户空间的通信,在用户态检查内核状态的机制。proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。

例如通过/proc/meminfo可以查看内存使用情况

[root@younixPC]# ls /proc
1     2040  2347  2874  474          fb           mdstat      sys
104   2061  2356  2930  9            filesystems  meminfo     sysrq-trigger
113   2073  2375  2933  acpi         fs           misc        sysvipc
1375  21    2409  2934  buddyinfo    ide          modules     tty
1395  2189  2445  2935  bus          interrupts   mounts      uptime
1706  2201  2514  2938  cmdline      iomem        mtrr        version
179   2211  2515  2947  cpuinfo      ioports      net         vmstat
180   2223  2607  3     crypto       irq          partitions
181   2278  2608  3004  devices      kallsyms     pci
182   2291  2609  3008  diskstats    kcore        self
2     2301  263   3056  dma          kmsg         slabinfo
2015  2311  2805  394   driver       loadavg      stat
2019  2337  2821  4     execdomains  locks        swaps

配置内核信息
下面对 /proc 中的一个虚拟文件进行读写(配置),首先检查内核的 TCP/IP 栈中 IP 转发的目前设置,然后启动这种功能。

root@younixPC:/# cat /proc/sys/net/ipv4/ip_forward
0
root@younixPC:/# echo "1" > /proc/sys/net/ipv4/ip_forward
root@younixPC:/# cat /proc/sys/net/ipv4/ip_forward
1

我们还可以用 sysctl 来配置这些内核条目。

proc文件系统体现在/proc/目录下有许多功能子目录,如下所示

子目录/文件名内容描述
apm高级电源管理
bus总线以及总线上的设备
devices可用的设备信息
drivers已经启用的驱动程序
interrupts中断信息
ioports端口使用情况
versions内核版本

proc文件特点
1)每个文件都严格规定了严格的权限(可读、可写、那个用户有权限)
2)可以自己通过编程添加一个proc文件
3) proc文件系统存在于内存中

2.编程添加proc文件的API

内核描述
struct proc_dir_entry {
***********‘
read_proc_t read_proc,
write_proc_t write_proc,


};

创建文件
struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, struct proc_dir_entry *parent)

name:要创建的文件名
mode: 要创建的文件属性,默认0755
parent:这个文件的父目录

创建目录
struct proc_dir_entry *proc_mkdir(const char *name,struct proc_dir_entry *parent)
name:要创建的目录名
parent:这个目录的父目录

删除目录/文件
void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
name:要删除的文件/目录名
parent:这个目录的父目录

读写操作
为了能让用户读写添加的proc文件,需要挂接上读写回调函数
read_proc
write_proc

读操作回调函数原型
int read_func(char *buffer, char **stat, off_t off, int count, int *peof, void data)
buffer:把返回给用户的信息写到buffer,最大不要超过PAGE_SIZE
stat:一般不用
off: 偏移量
count: 用户要取得字节数
peof:读到文件尾时,需要把
peof设为1
data: 一般不使用

写操作:
int write_func(struct file *file, const char *buffer, unsigned long count, void *data)
file:该proc文件对应的file结构
buffer:待写的数据所在的位置
count:待写的数据大小
data:一般不使用

3.编程添加proc文件实现流程

1)调用create_proc_entry创建一个struct proc_dir_entry
2) 对创建的struct proc_dir_entry进行赋值, read_proc write_proc mode owner
size等

范例


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值