Chinaunix

标题: (已解决)求教大牛,一个诡异的关于“No such device or address"的错误? [打印本页]

作者: g84ch    时间: 2009-08-24 23:40
标题: (已解决)求教大牛,一个诡异的关于“No such device or address"的错误?
最近测试了书上的一个例子(程序代码见附件),编译通过,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 编辑 ]
作者: unixlinuxsys    时间: 2009-08-25 08:33
[root@ThinkPad ~]# touch  /dev/abc/abc
[root@ThinkPad abc]# echo '12345'> /dev/abc/abc
[root@ThinkPad abc]# less abc
作者: g84ch    时间: 2009-08-25 21:54
标题: 回复 #2 unixlinuxsys 的帖子
这位大哥,我实在不明白,你这几行命令是啥意思。。。望赐教~~~




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