Linux内核由4.4升级到5.4做的一些改变(三)——proc文件系统

3.proc文件系统

4.4内核,include/linux/seq_file_net.h文件中有下列几个函数可以供用户使用

int seq_open_net(struct inode *, struct file *,
		 const struct seq_operations *, int);
int single_open_net(struct inode *, struct file *file,
		int (*show)(struct seq_file *, void *));
int seq_release_net(struct inode *, struct file *);
int single_release_net(struct inode *, struct file *);

而在5.4中,这些函数被设为内部函数,禁止外部模块使用。

同时,在5.4内核中上述函数被封装成为一个新的函数供用户使用

//文件名fs/proc/proc_net.c
static const struct file_operations proc_net_seq_fops = {
	.open		= seq_open_net,
	.read		= seq_read,
	.write		= proc_simple_write,
	.llseek		= seq_lseek,
	.release	= seq_release_net,
};

struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode,
		struct proc_dir_entry *parent, const struct seq_operations *ops,
		unsigned int state_size, void *data)
{
	struct proc_dir_entry *p;

	p = proc_create_reg(name, mode, &parent, data);
	if (!p)
		return NULL;
	pde_force_lookup(p);
	p->proc_fops = &proc_net_seq_fops;
	p->seq_ops = ops;
	p->state_size = state_size;
	return proc_register(parent, p);
}
EXPORT_SYMBOL_GPL(proc_create_net_data);

用户可使用的函数如下,可跳过设置file_operations的步骤

//文件名 include/linux/proc_fs.h
struct proc_dir_entry *proc_create_net_data(const char *name, umode_t mode,
		struct proc_dir_entry *parent, const struct seq_operations *ops,
		unsigned int state_size, void *data);
#define proc_create_net(name, mode, parent, state_size, ops) \
	proc_create_net_data(name, mode, parent, state_size, ops, NULL)

在实际开发过程中,新的内核方案可以有效减少用户代码的体量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值