#include #include #include MODULE_LICENSE("GPL"); ssize_t demo_read(struct file* fp, char* user_buffer, size_t user_buffer_size, loff_t *offset) { size_t remaining = 8 - *offset; size_t copylen = (remaining < user_buffer_size)? remaining : user_buffer_size; printk("Read was just called!\n"); if(*offset == 8) return 0; strncpy(user_buffer, "buffalo" + *offset, copylen); *offset = copylen; return copylen; } ssize_t demo_write(struct file* fp, const char *user_buffer, size_t user_buffer_size, loff_t *offset) { printk("Write was just called! User wants to write %s (%lu bytes)\n", user_buffer, user_buffer_size); return user_buffer_size; } struct file_operations our_file_operations = { read: demo_read, write: demo_write }; int __init init(void) { printk("This is in the kernel!\n"); proc_create("useproc_demo", 0, 0, &our_file_operations); return 0; } void __exit cleanup(void) { remove_proc_entry("useproc_demo", 0); printk("We're out of the kernel now\n"); } module_init(init); module_exit(cleanup);