- 论坛徽章:
- 0
|
我再详细点
把read函数的代码贴出来吧
ssize_t scull_read(struct file *filp, char __user *buf, size_t count,
loff_t *f_pos)
{
struct scull_dev *dev = filp->private_data;
struct scull_qset *dptr;
int quantum = dev->quantum, qset = dev->qset;
int itemsize = quantum * qset;
int item, s_pos, q_pos, rest;
ssize_t retval = 0;
item = (long)*f_pos / itemsize; //这里为什么要这样算??意图我知道,要计算出在scull_dev 链表中的位置,
//但怎么能用指针值除以一个量子集的大小?这得出的是什么?为什么能这么算
//呢?
rest = (long)*f_pos % itemsize;
s_pos = rest / quantum;
q_pos = rest % quantum;
dptr = scull_follow(dev, item); //查找再链表中的当前位置
if (count > quantum - q_pos)
count = quantum - q_pos;
if (copy_to_user(buf, dptr->data[s_pos] + q_pos, count)) {
retval = -EFAULT;
goto out;
}
*f_pos += count;
retval = count;
out:
return retval;
}
[ 本帖最后由 冰伊罗 于 2008-7-11 15:11 编辑 ] |
|