IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux proc文件系统驱动demo -> 正文阅读

[系统运维]linux proc文件系统驱动demo

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/string.h>
#include <linux/vmalloc.h>
#include <asm/uaccess.h>
#include <linux/sched.h>

static int itype=0;
module_param(itype, int, 0);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("PROC FILE DEMO");

#define MAX_LENGTH   500
#define MAX_proc_LENGTH 1024

static struct proc_dir_entry *proc_entry;
static char *proc_buffer;

int proc_read( char *page, char **start, off_t off,int count, int *eof, void *data )
{
	int size = 0;
	struct task_struct *p;
	char state;
	size+=sprintf(page+size, "%5s%7s%7s%7s%7s%7s%7s  %s\n\n", "PID","UID","PRIO","POLICY", "STATE","UTIME","STIME","COMMAND");
	
	for_each_process(p)
	{
		switch((int)p->state)
		{
		case -1: state='Z'; break;
		case 0: state='R'; break;
		default: state='S'; break;
		}
		size+=sprintf(page+size,
			"%5d%7d%7d%7d%7c%7d%7d  %s\n",
			(int)p->pid,
			(int)p->uid,
			(int)p->rt_priority,
			(int)p->policy,
			state,
			(int)p->utime,
			(int)p->stime,
			p->comm);
	}
	return (size);
}

ssize_t proc_write( struct file *filp, const char __user *buff, unsigned long len, void *data )
{
	if(len>MAX_LENGTH)len=MAX_LENGTH;
	if (copy_from_user(proc_buffer, buff, len ))
	{
		return -EFAULT;
	}
	proc_buffer[len] = 0;
	printk(KERN_INFO "proc_write: %s\n",proc_buffer);
	return len;
}

// 函数返回0允许操作、返回非0不允许操作并指出不允许操作的原因

static int proc_permission(struct inode *inode, int op, struct nameidata *foo)
{
	printk(KERN_INFO "proc_permission op %d\n",op);
	if(itype==op)
	{
		return -EACCES;
	}
	return 0;
}

static struct inode_operations proc_inode_operations = {
	.permission = proc_permission,
};


int init_proc_module( void )
{
	int ret = 0;
	proc_buffer = (char *)vmalloc( MAX_proc_LENGTH );
	if (!proc_buffer) 
	{
		ret = -ENOMEM;
	} 
	else 
	{
		memset( proc_buffer, 0, MAX_LENGTH );
		proc_entry = create_proc_entry( "demo", 0644, NULL );
		if (proc_entry == NULL)
		{
			ret = -ENOMEM;
			vfree(proc_buffer);
			printk(KERN_INFO "demo: Couldn't create proc entry\n");
			
		} 
		else
		{
			proc_entry->proc_iops = &proc_inode_operations;
			proc_entry->read_proc = proc_read;
			proc_entry->write_proc = proc_write;
			proc_entry->owner = THIS_MODULE;
			printk(KERN_INFO "demo: Module loaded.\n");
		}
	}
	return ret;
}


void cleanup_proc_module( void )
{
	remove_proc_entry("demo", &proc_entry);
	vfree(proc_buffer);
	printk(KERN_INFO "demo: Module unloaded.\n");
}


module_init( init_proc_module );
module_exit( cleanup_proc_module );
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 12:01:58  更:2022-05-05 12:03:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:35:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码