Linux关于proc_create函数的修改

简介: Linux关于proc_create函数的修改

错误提示:"passing argument 4 of ‘proc_create’ from incompatiable pointer type"如下图

可以看到提示参数不匹配,通过打开proc_fs.h文件可以看到有这个函数的定义,见下图。

可以看到,第四个参数定义为const struct proc_ops *proc_ops,而非参考代码中的const struct file_operations *proc_fops。因而需要对proc_ops结构体进行修改,通过查阅proc_ops结构体的定义,见下图

可以看到只需对其中的成员proc_read赋值为read_proc即可。

参考代码如下:

#include <linux/module.h>
#include <linux/kernel.h>
#include<linux/sched.h>
#include <asm/uaccess.h>
#include <linux/proc_fs.h>
static struct proc_dir_entry *proc_parent;
int len,temp;
char *msg;
static ssize_t read_proc(struct file *filp,char __user *buf,size_t count,loff_t *offp ) 
{
  int a;  //used to recept the value return from the function 
       if(count>temp)
              count=temp;
        temp=temp-count; 
        a=raw_copy_to_user(buf,msg, count);
        if(count==0)
              temp=len; 
        return count;
}
static struct proc_ops proc_fops={
    .proc_read = read_proc
};
void create_new_proc_entry(void)
{
      /*create a new directory named hello, and return a pointer point to this dir*/
      proc_parent = proc_mkdir("hello",NULL);
      if(!proc_parent)
      {
            printk(KERN_INFO "Error creating proc entry");
       }
      /*create a file named world, add read attribute to this file using proc_fops*/
      proc_create("world",0,proc_parent,&proc_fops);
      msg="hello world\n"; /*file content*/
      len=strlen(msg);
      temp=len;
      printk(KERN_INFO "1.len=%d",len);
      printk(KERN_INFO "proc initialized");
}
static int __init proc_init(void)
{
      create_new_proc_entry();
      return 0;
}
static void __exit proc_cleanup(void)
{
       printk(KERN_INFO " Inside cleanup_module\n");
       remove_proc_entry("hello",proc_parent);
       remove_proc_entry("world",NULL);
}
MODULE_LICENSE("GPL");
module_init(proc_init);
module_exit(proc_cleanup);


相关文章
|
3月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
150 6
|
3月前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
161 3
|
3月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
4月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
55 2
|
4月前
|
Shell Linux C语言
Linux0.11 execve函数(六)
Linux0.11 execve函数(六)
79 1
|
4月前
|
Linux API
Linux源码阅读笔记07-进程管理4大常用API函数
Linux源码阅读笔记07-进程管理4大常用API函数
|
4月前
|
安全 Unix Linux
Linux Clone函数
Linux Clone函数
67 3
|
4月前
|
Linux
Linux0.11 文件打开open函数(五)
Linux0.11 文件打开open函数(五)
52 0
|
4月前
|
存储 Linux 调度
Linux 0.11 fork 函数(二)
Linux 0.11 fork 函数(二)
52 0
|
4月前
|
Shell Linux 程序员
在Linux中, 什么是shell函数?如何使用它们?
在Linux中, 什么是shell函数?如何使用它们?