Linux学习笔记之proc文件使用篇

在proc 目录下创建文件,不得不提到的struct file_operations , 详细struct 信息,可以查阅—— [linux kernel] .

本篇主要讨论的是以下几个接口:
这里写图片描述

open

int (open) (struct inode , struct file *); //打开
这里写图片描述

实现test_proc_show function,这样可以在shell 下输入cat /proc/test返回help 信息、或者显示你希望提供的信息。
test_proc_show 函数:

static int test_proc_show(struct seq_file *m, void *v);

write

read/write 功能类似,write 相对较为复杂,这里主要介绍下write。

static ssize_t test_proc_write(stuct file *file, const char *buf, size_t count, loff_t *f_ops);

write 使用有两种方法:

  1. shell 下输入echo X X > /proc/test
  2. 使用linux 提供的write接口。

第一个方法比较简单,就不说了。主要说下第二个例子:

/* open file */
char * file = "/proc/test";
int fd = 0;
fd = open(file, O_RDWR);
if (fd == -1) {
    prerror("open fail\n");
    return NULL;
}

关于test_proc_write的功能编写,与正常的function没有区别,主要注意返回值:

  1. 如果正常执行,请返回count;如果无法用sscanf拿到预期的值,请再使用sscanf拿一次字符串,如果返回值非0,请返回count;如果返回值为0,请返回异常值。关于sscanf 请参考—— [Linux学习笔记之sscanf] .
  2. 如果异常执行,请返回异常值。

创建proc下文件

说了这么多,可能还不知道如何在proc 下创建一个file 呢?其实比较简单, 核心的function就是:

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

示例:
这里写图片描述

如果返回非空,则表示file 创建成功,当然在创建的时候需要制定文件名(name), 操作权限(mode),parent可以填NULL,proc_fops就是上文提到的file_operations.

proc_create 一般是放在init函数里面,init 函数在linux kernel 里面有两种方法:

  1. 提供一个init 函数,由相关module init 的时候调用;
  2. 提供module init / module exit 函数入口,由kernel 加载或者手动inmod
    moudle_init(void )/module_exit(void )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值