免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10513 | 回复: 2
打印 上一主题 下一主题

(已解决)求教大牛,一个诡异的关于“No such device or address"的错误? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-24 23:40 |只看该作者 |倒序浏览
最近测试了书上的一个例子(程序代码见附件),编译通过,insmod的后用如下方式测试出错。
root@ubuntu# echo '12345' > /dev/globalmem

root@ubuntu# cat /dev/globalmem
12345
cat: /dev/globalmem: No such device or address

测试平台是ubuntu8.04,内核2.6.24

问题:能够输出写入的内容,但是为什么会报错呢?望大牛指点。先谢谢了~~~


globalmem.rar (1.87 KB, 下载次数: 45)


这个问题我已经找到了,首先cat命令read设备内容,当返回值是大于0的时候,cat会继续在open设备,然后进行read操作(每次读4096字节)。程序例子中第一次读4096个字节后,返回值4096,指针偏移也增加了4096,代码如下:
*ppos += count;----》值为4096
ret = count;
返回之后,cat又再一次open设备,然后读设备,这是后read的参数发生变化了,具体注解如下:
static ssize_t globalmem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)
{
                unsigned long p = *ppos;//这里的*ppos=4096,第一次是0
                unsigned int count = size;//这里的size=4096。
                int ret = 0;
                struct globalmem_dev *dev = filp->private_data;

                if(p >= GLOBALMEM_SIZE)  //条件满足,返回-ENXIO,
                    return count ? -ENXIO:0;
。。。。。。。。。


当返回值是-ENXIO时,就会报错。cat: /dev/globalmem: No such device or address

[ 本帖最后由 g84ch 于 2009-8-25 21:59 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-08-25 08:33 |只看该作者
[root@ThinkPad ~]# touch  /dev/abc/abc
[root@ThinkPad abc]# echo '12345'> /dev/abc/abc
[root@ThinkPad abc]# less abc

论坛徽章:
0
3 [报告]
发表于 2009-08-25 21:54 |只看该作者

回复 #2 unixlinuxsys 的帖子

这位大哥,我实在不明白,你这几行命令是啥意思。。。望赐教~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP