Chinaunix

标题: LDD3中的错误 [打印本页]

作者: stuman    时间: 2014-06-22 14:30
标题: LDD3中的错误
在第6章高级字符驱动程序中的scull_p_write函数中,如果缓冲区中没有空间可写入数据时,写操作将被阻塞,获取剩余空间的函数为:
static int spacefree(struct scull_pipe *dev)
{
        if (dev->rp == dev->wp)
                return dev->buffersize - 1;
        return ((dev->rp + dev->buffersize - dev->wp) % dev->buffersize) - 1;
}
rp为当前读位置,wp为当前写位置,buffersize为缓冲区大小,我觉得最后没有必要再减1呀!!
作者: humjb_1983    时间: 2014-06-23 11:02
“rp为当前读位置,wp为当前写位置”
rp --> 6
wp-->2
spacefree=3,4,5
spacefree=6-2-1=3
是这样?
作者: asuka2001    时间: 2014-06-23 11:21
wp_inc(wp) == rp时即视为 ring buffer满,而 wp == rp认为 ring buffer空!

所以 free space 需要减1




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2