(已解决)求教大牛,一个诡异的关于“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
问题:能够输出写入的内容,但是为什么会报错呢?望大牛指点。先谢谢了~~~
这个问题我已经找到了,首先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 编辑 ] # touch/dev/abc/abc
# echo '12345'> /dev/abc/abc
# less abc
回复 #2 unixlinuxsys 的帖子
这位大哥,我实在不明白,你这几行命令是啥意思。。。望赐教~~~
页:
[1]