我正在用 C 语言编写一个组件,该组件将由多个访问同一文件的不同进程使用。
每个进程将同时访问文件的不同部分,主要用于读取,但也用于写入。
我试图找出正确的方法是否是:
选项A: 对于每个进程,为整个文件调用一次 CreateFileMapping,然后在不同的部分多次使用 MapViewOfFile 来访问它需要的部分,这意味着如果我希望访问 10 个部分,我将为整个文件调用一次 CreateFileMapping,端到端,然后 MapViewOfFile 10 次,文件的每个部分一次。
或者
选项B: 对于每个进程在其希望访问的每个特定部分上调用 CreateFileMapping 和 MapViewOfFile,这意味着如果我希望访问 10 个部分,我将分别调用 CreateFileMapping 和 MapViewOfFile 10 次。
谢谢!
最佳答案
您肯定需要在每个进程中至少调用一次 CreateFileMapping
和 MapViewOfFile
才能访问数据。不过,您无需多次调用他们。当然,如果映射本身很大,您可能需要取消映射并重新映射以节省虚拟地址空间,但如果数据量不是那么大,您可以跳过此操作。
映射文件映射后,您的进程可以直接看到数据。读取和写入操作会立即发生,为了序列化访问并防止线程竞争情况,您需要使用 Interprocess Communication ,例如信号量。
您可能想阅读和研究示例代码:Shared Memory 。还可以尝试谷歌搜索 MapViewOfFile
+ WaitForMultipleObjects
了解更多信息。
关于c - 如果我打算通过多个进程访问文件的多个部分,使用 CreateFileMapping 和 MapViewOfFile 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952214/