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