如何理解文件共享选项(例如FILE_SHARE_READ)

实际上它并不复杂,至少比你想象的要简单。

FILE_SHARE_READ

这个文件共享选项的意思是:当我已经打开了一个文件后,其他人依然可以读取这个文件。
如果你不使用这个选项,则你是在表达这个意思:当我打开一个文件后,我不希望其他任何人读取这个文件。
明白了上面的讲解,接下来的工作就交给操作系统处理就可以了。
假设,你忽略了这个选项,那么就在表明:文件打开后,你不希望其他人能读取这个文件。这样的话,当文件被你打开之后,其他任何人在尝试打开文件进行读取的时候就会失败,直到文件被关闭。
就是这么简单。

当然了,如果文件已经打开了,则系统还会在你期望的操作权限和已经打开文件的对象的共享选项之间做一个比较操作。举个例子,如果某人打开了一个文件并拒绝其他人的读取权限,则当你尝试打开这个文件以读取文件内容的时候,系统会给出一个共享权限错误。这个确实非常容易理解。
如果某人打开文件的时候没有使用FILE_SHARE_READ选项,然后另一个人打开文件时没有使用FILE_SHARE_WRITE选项,则对文件的读取或者写入都会被操作系统拒绝。(读取被拒绝是因为第一个人没有允许其他人的读取权限,而写入失败则是因为第二个人没有允许其他人的写入权限)
以此类推,我们就不难理解”删除”和”写入”这两个共享选项了。

文件共享和期望的文件操作

有个特别容易混淆的地方:
文件共享选项表达的是:你允许其他人可以对文件进行什么样的操作。
期望的文件操作表达的是:你自己想要对文件进行什么样的操作。
所以,在调用CreateFile时,这两个参数不一定要互相匹配。请根据上面的描述和实际的需求选择最为合适的参数。

总结

总算是有点明白CreateFile里的这两个参数的意思了:不容易啊。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《How do the FILE_SHARE_* bits interact with the desired access bits?》

如何理解文件共享选项(例如FILE_SHARE_READ)_第1张图片

你可能感兴趣的:(OldNewThing)