mygk 发表于 2004-7-26 14:48:22

【ll_rw_block()读数出错,高手求助】

目的:
对于给定的设备dev和设备上特定的块号block,读取这个block的内容到内存。

过程:
打开随便一个文件,得到文件号:fd=open("/home/a.c", O_RDONLY);
得到这个文件对应的file对象:file=fget(fd);
通过这个file对象,得到其所在设备的设备号:dev=file->f_dentry->d_inode->i_rdev
使用bh=getblk(dev,block,1024)取得一个其在内存中对应的buffer_head
然后,使用ll_rw_block(READ,1,bh)将这个块号在设备上对应的块的内容读入到buffer_head中,
然后,打印buffer_head的数据printk("*(bh->b_data));

问题:
这样可以读出数据,并显示,
但是
1)得到的设备号是5632,这样主设备号是16。似乎是错的吧?
2)每次得到的输出数据内容不一样。连续两次执行,内容都不一定一样,为什么呢?
3)如果最开始打开的是光驱中的文件,也就是说如果后面想读取光驱中的某个块,则不能读出数据。为什么?
3)如何要实现同样的目标,还有什么其他的方法么?
页: [1]
查看完整版本: 【ll_rw_block()读数出错,高手求助】