#include #include #include #include #include #include #include #include #define PROC_FILE_NAME "read_test" unsigned char buffer[1024]; size_t buflen; ssize_t read_simple(struct file *filp,char *buf,size_t count,loff_t *offp ) { printk("The secret message is: %s\n", buf); // This is backwards, but it worked in class at least printk("buf = %lx, count = %lu, offp = %lu\n", buf, count, *offp); int remainder = buflen - *offp; int len = (remainder < count)? remainder:count; strncpy(buf, buffer+(*offp), len); *offp += len; return len; } struct file_operations proc_fops = { read: read_simple, }; int proc_init (void) { int i; for(i = 0; i < 1023; i++){ buffer[i] = 'q'; } strcpy(buffer+100, "This is a qreature! It lives inside the q area!"); buffer[1023] = 0; buflen = strlen(buffer); proc_create(PROC_FILE_NAME,0,NULL,&proc_fops); return 0; } void proc_cleanup(void) { remove_proc_entry(PROC_FILE_NAME,NULL); } MODULE_LICENSE("GPL"); module_init(proc_init); module_exit(proc_cleanup);