Chinaunix

标题: 读设备文件出现死循环! [打印本页]

作者: liuhuizhangyi    时间: 2008-09-25 15:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: dreamice    时间: 2008-09-25 15:55
你确定你的写操作已经完成了才读的?你查到的死循环是在什么地方?
作者: liuhuizhangyi    时间: 2008-09-25 16:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: dreamice    时间: 2008-09-25 16:38
你这个驱动有一个很大的问题,你写进去的数据,到底放哪里了?你驱动的buf在哪里定义的?
作者: ryancat    时间: 2008-09-25 16:43
能把strace的信息贴出来吗,只贴最后的read,write那部分.

[ 本帖最后由 ryancat 于 2008-9-25 16:48 编辑 ]
作者: liuhuizhangyi    时间: 2008-09-25 16:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 16:53
操作的那个端口是干什么的?驱动的目的不了解
作者: liuhuizhangyi    时间: 2008-09-25 16:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 17:02
标题: 回复 #8 liuhuizhangyi 的帖子
你的read.c的代码是不是贴错了,里面没有一个循环啊?但是strace显示你调用了很多次read
作者: ryancat    时间: 2008-09-25 17:05
你驱动的read函数发现缓冲区没有数据的时候应该返回0,表示文件结束.其他时候也应该返回实际读取的数目,而不都是count.
作者: liuhuizhangyi    时间: 2008-09-25 17:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: liuhuizhangyi    时间: 2008-09-25 17:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 17:11
如果read.c是原封不动贴上来的话,"byte=read..."那行还缺少个分号,编不过的吧
作者: liuhuizhangyi    时间: 2008-09-25 17:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 17:14
原帖由 liuhuizhangyi 于 2008-9-25 17:12 发表


就这里我不是很明白,不知道他问什么老读个没完



所以我感觉代码改过了,你重新编译下再试试,加点调试信息
作者: liuhuizhangyi    时间: 2008-09-25 17:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 17:19
原帖由 liuhuizhangyi 于 2008-9-25 17:16 发表
很是对不起大家 刚才不知道把读那块while给删了


那修改下驱动的read,文件结束返回0就不会一直读了.
作者: liuhuizhangyi    时间: 2008-09-25 17:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-25 17:22
原帖由 liuhuizhangyi 于 2008-9-25 17:19 发表


还是那样  是不是驱动程序有问题
加入我把那个设备文件/dev/aaa 换成一个普通的文本文件就没有这种现象


你驱动的read没有判断缓冲区还有没有数据,每次都返回的要读的个数.也就是认为文件一直都有数据,读不完,不知道这是不是你驱动的本意.
作者: ryancat    时间: 2008-09-25 17:26
要么你的驱动保存一个文件的size.
在write的时候修改它,读的时候发现读了size个了就返回0,表示文件结束.否则读端口会一直都有数据的.
作者: liuhuizhangyi    时间: 2008-09-25 17:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: liuhuizhangyi    时间: 2008-09-26 08:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: ryancat    时间: 2008-09-26 09:57
原帖由 liuhuizhangyi 于 2008-9-26 08:12 发表
再没有人理我了?  那我还是自己琢磨琢磨吧
不过还是得谢谢楼上各位大侠


楼上的楼上我给了建议了啊,就是自己保存一个文件的长度,用来描述写的时候写了多少个字节.这样读的时候就知道读多少次端口就结束了.
至于写0到256就不会死循环,我觉得和你写的测试代码有关.当前的代码还是会死循环的.




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