procfs文件系统

1、proc_mkdir

说明:在/proc下创建目录

函数原型:

struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent)

参数:

  • name
    要创建的目录名称
  • parent
    父目录,如果为NULL,表示直接在/proc下面创建目录。

2、proc_mkdir_data

说明:在/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

3、proc_create_data

说明:创建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
    为你要在哪个文件夹下建立名字为name的文件,如:init_net.proc_net是要在/proc/net/下建立文件。
  • proc_fops
    为struct file_operations
  • data
    保存私有数据的指针,如不要为NULL。

4、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的区别在于他不能保存私有数据指针。

5、PDE_DATA

获取proc_create_data传入的私有数据。

说明:这个函数在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
    所要创建的符号链接名字。

7、remove_proc_entry

说明:删除procfs文件系统中的文件或者目录。

函数原型:

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

参数:

  • name
    要删除的文件或者目录名。
  • parent
    符号所在的目录,如果为NULL,表示在/proc目录下。

Eg:

#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,//这里是自己的code
    /*下面是kernel的callback,所以不用深究*/
    .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);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值