|
亚瑟王 发表于 2013-6-19 17:45
亲,没看过这样的实验,就目前提供的信息,没法帮你了。
我把程序贴上来麻烦帮我看看吧 我判断到是llseek的offset得不到正确的值但不知道为什么?
应用程序中:
fseek(fp0,0,SEEK_SET);
驱动程序中:- static loff_t mem_llseek(struct file *filp, loff_t offset, int whence)
- {
- loff_t newpos=0;
- switch(whence) {
- case 0: /* SEEK_SET */
- {
- printk(KERN_INFO "in seek_set\n");
- newpos = offset;
- break;
- }
- case 1: /* SEEK_CUR */
- newpos = filp->f_pos + offset;
- break;
- case 2: /* SEEK_END */
- newpos = MEMDEV_SIZE -1 + offset;//offset为负数
- break;
- default: /* can't happen */
- return -EINVAL;
- }
- if ((newpos<0) || (newpos>MEMDEV_SIZE))
- {
- printk(KERN_INFO "newpos<0||>MEMDEV_SIZE\n");
- return -EINVAL;
- }
-
- filp->f_pos = newpos;
- return newpos;
- }
复制代码 运行结果offset值貌似溢出了,求解 |
|