int handle_seek_call(unsigned long ioctl_arg) { struct seek_args_t seek_args; int fd; int offset; if (0 != copy_from_user(&seek_args, (struct seek_args_t *)ioctl_arg, sizeof(struct seek_args_t))) { printk("Error copying creat args from user\n"); return -1; } fd = seek_args.fd; offset = seek_args.offset; #ifdef DEBUG printk("Received seek call with args %i, %i\n", fd, offset); #endif // UNCOMMENT TO PASS TO RAMDISK // seek_args.ret_val = rd_seek(fd, offset); if (0 != copy_to_user((void*) ioctl_arg, (void*) &seek_args, sizeof(struct seek_args_t))) { printk("Error copying seek return value to user level\n"); return -1; } return 1; }
int main() { char a = 'a'; rd_read(3, &a, 12); rd_close(10); rd_write(5, &a, 10); rd_seek(6, 14); rd_readdir(12, &a); }