0
你好我是内核空间编程的新手,我来了解proc文件系统。/proc文件系统挂起我的系统
我写它创建了一个proc文件同时注册
我删除,同时注销该模块的模块。 但是,如果我不删除该文件使用remove_proc_entry()并取消注册我的模块,然后系统挂起一段时间后
为什么这样呢?
该代码是
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/proc_fs.h>
#include<linux/module.h>
#include<linux/fs.h>
int myopen(struct inode *, struct file *);
ssize_t myread(struct file *, char __user *, size_t, loff_t *);
int myopen(struct inode *p, struct file *q)
{
printk(KERN_ALERT "I am in myopen\n");
return 0;
}
ssize_t myread(struct file *p, char __user *q, size_t r, loff_t *s)
{
printk(KERN_ALERT "I am in myread\n");
return 0;
}
static const struct file_operations fs={
.open=myopen,
.read=myread
};
int start(void)
{
proc_create("myprocfile", 0, NULL, &fs);
return 0;
}
void stop(void)
{
//remove_proc_entry("myprocfile", NULL);
/*
If I uncomment the above line
then everything works fine
*/
}
module_init(start);
module_exit(stop);
MODULE_LICENSE("GPL");
非常感谢您的良好解释.....但是我不理解我注销了执行文件操作的模块。我没有为此写任何用户空间代码......然后谁在释放内存上执行操作? –
它可以是,例如,系统deamon,它定期检查文件。在任何情况下,与释放操作结构相关的文件都是不好的。 – Tsyvarev
当我尝试注销模块时,它给了我一个终端“死亡”的消息......我不知道哪个进程在这里死亡 –