커 널 모듈 읽 기 및 쓰기/proc 생 성

2187 단어 커 널 커 널
/*************************************************
 *    seq_file       proc     
 *      3.10     
 *    Author: ZhangNa
 *     Date: 2015-5-17 
 *      *************************************************/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
static char *str = NULL;
 
/*5,  show  
 *                  
 *       proc file      */
static int my_proc_show(struct seq_file *m, void *v)
{
    /*      printfk     
 *          seq_file         
 *               ldd3 91 */
//    seq_printf(m, "current kernel time is %ld
", jiffies); seq_printf(m, "str is %s
", str); return 0; } /*3, open write */ static ssize_t my_proc_write(struct file *file, const char __user *buffer, size_t count, loff_t *f_pos) { char *tmp = kzalloc((count+1), GFP_KERNEL); if(!tmp) return -ENOMEM; if(copy_from_user(tmp, buffer, count)) { kfree(tmp); return EFAULT; } kfree(str); str = tmp; return count; } static int my_proc_open(struct inode *inode, struct file *file) { return single_open(file, my_proc_show, NULL); } /*2, proc_create flie_operations * my , * seq single , * open * ldd3 93 */ static struct file_operations my_fops = { .owner = THIS_MODULE, .open = my_proc_open, .release = single_release, .read = seq_read, .llseek = seq_lseek, .write = my_proc_write, }; static int __init my_init(void) { struct proc_dir_entry *file; /*3.10 proc * file_operations*/ /*1, proc , flie_operations*/ file = proc_create("abc_proc", 0644, NULL, &my_fops); if(!file) return -ENOMEM; return 0; } /*6, proc */ static void __exit my_exit(void) { remove_proc_entry("abc_proc", NULL); kfree(str); } module_init(my_init); module_exit(my_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("ZhangNa");

좋은 웹페이지 즐겨찾기