标题:
Linux内核中的proc文件系统(3)
[打印本页]
作者:
yuyang911220
时间:
2017-4-23 20:15
标题:
Linux内核中的proc文件系统(3)
参数:
name
你要创建的文件名。
mode
为创建的文件指定权限
parent
为你要在哪个文件夹下建立名字为name的文件,如:init_net.proc_net是要在/proc/net/下建立文件。
proc_fops
为struct file_operations
data
保存私有数据的指针,如不要为NULL。
例子:
////////////////////////test.c////////////////////////////////////////
#include <linux/init.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <net/net_namespace.h>
#include <linux/mm.h>
MODULE_LICENSE("GPL");
typedef struct {
int data1;
int data2;
}ST_Data_Info_Type;
static ST_Data_Info_Type g_astDataInfo[2];
static
int test_proc_show(struct seq_file *m, void *v)
{
ST_Data_Info_Type* pInfo = (ST_Data_Info_Type*)m->private;
if(pInfo != NULL)
{
seq_printf(m, "%d----%d\n", pInfo->data1, pInfo->data2);
}
return 0;
}
static
int test_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, test_proc_show, PDE_DATA(inode));
}
static const struct file_operations dl_file_ops = {
.owner = THIS_MODULE,
.open = test_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static struct proc_dir_entry *s_pstRootTestDir;
void init_mem(void)
{
/* create /proc/test */
s_pstRootTestDir = proc_mkdir("test", NULL);
if (!s_pstRootTestDir)
return;
g_astDataInfo[0].data1=1;
g_astDataInfo[0].data2=2;
proc_create_data("proc_test1", 0644, s_pstRootTestDir, &dl_file_ops, &g_astDataInfo[0]);
g_astDataInfo[1].data1=3;
g_astDataInfo[1].data2=4;
proc_create_data("proc_test2", 0644, s_pstRootTestDir, &dl_file_ops, &g_astDataInfo[1]);
}
static
int __init test_module_init(void)
{
printk("[test]: module init\n");
init_mem();
return 0;
}
static void __exit test_module_exit(void)
{
printk("[test]: module exit\n");
remove_proc_entry("proc_test1", s_pstRootTestDir);
remove_proc_entry("proc_test2", s_pstRootTestDir);
remove_proc_entry("test", NULL);
}
module_init(test_module_init);
module_exit(test_module_exit);
proc_create
说明:创建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
为你要在哪个文件夹下建立名字为name的文件,如:init_net.proc_net是要在/proc/net/下建立文件。
proc_fops
为struct file_operations
注意:这个接口和proc_create_data的区别在于他不能保存私有数据指针。
PDE_DATA
获取proc_create_data传入的私有数据。
proc_symlink
说明:这个函数在procfs目录下创建一个从name指向dest的符号链接. 它在用户空间等效为ln -s dest name。
函数原型:
struct proc_dir_entry *proc_symlink(const char *name, struct proc_dir_entry *parent, const char *dest)
参数:
name
原始符号。
parent
符号所在的目录。
dest
所要创建的符号链接名字。
remove_proc_entry
说明:删除procfs文件系统中的文件或者目录。
函数原型:
void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
参数:
name
要删除的文件或者目录名。
parent
符号所在的目录,如果为NULL,表示在/proc目录下。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0