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
當我嘗試註銷模塊時,它給了我一個終端「死亡」的消息......我不知道哪個進程在這裏死亡 –