阅读:1373回复:7
CcMapData问题
我创建了一个文件的FileObject, 长度是Len1,我第一次调用CcMapData时,会触发出一个Read,也就时会进入Read例程, 这时即使我调用过CcUnpinData函数,再调用CcMapData时,系统就不再会触发一个Read了,但map出来的内容是正确的,这我想是系统cache起的作用。
我的问题是,这时我如果把文件的长度重新设置成Len2,并且Len2 > Len1的,这时我再调用CcMapData函数,并且Offset=Len1,结果系统就是不触发Read,为什么啊。 |
|
|
沙发#
发布于:2007-05-11 10:34
自己顶一下
高手啊,谁能给个答案,我怎么样才能让系统触发出read啊,这个问题困扰了我好久了 |
|
|
板凳#
发布于:2007-05-11 11:09
你的问题都太深奥了
大家都看不懂 你可以解释下你要做的目的 及其实现的功能 |
|
地板#
发布于:2007-05-11 11:50
我是在写udf文件系统的驱动,现在我想map盘中两块数据, 这两个数据块在盘的物理地址是不连续的。我默认创建的FileObject长度只有一个数据块的长度,map第一块是成功的,我根据第一块的数据,找到第二块数据的在盘中物理地址,这时我想把第二块数据map出来,这样这个FileObject的数据由这两块数据组成的,可是我怎么也map不出第二块数据。
我测试了一下发现,我把CcMapData的offset和length都设置成第一块+第二块数据长度,倒是会触发一个read的,也就是会去盘里重新读取的,但如果我把Offset设置到第一块尾部,map长度为第二块长度,结果系统就是不会触发read,去盘里重新读取,不知道为什么? 谁能帮我,我高分相送 |
|
|
地下室#
发布于:2007-05-11 22:57
What is the return value of CcMapData. Did you set the parameter Flag to MAP_WAIT?
|
|
5楼#
发布于:2007-05-12 08:20
return is TRUE, FLAG is set 0x01
|
|
|
6楼#
发布于:2007-05-14 23:07
引用第3楼zzq191于2007-05-11 11:50发表的“”: I think the problem is here. CcInitializeCacheMap is called with first block size and you are trying to get first block + second block. Try CcSetFileSizes() to inform CM the change of file size before calling CcMapData() to get second data block. |
|
7楼#
发布于:2007-05-22 11:45
我在调用 CcMapData() 之前,先调用CcSetFileSizes()函数设置新的长度了,结果还是不行
现在我是对每一块创建一个FileObject,暂时可以读取了,但我想这个不是一个好的方式 我还是想只创建一个FileObject来实现,但我还没有找到失败的原因 |
|
|