在C++中同时创建映射文件的独立区域以进行读写

在C++中同时创建映射文件的独立区域以进行读写,c++,windows,multithreading,file-io,memory-mapped-files,C++,Windows,Multithreading,File Io,Memory Mapped Files,我试图在SSD磁盘上创建一个文件,并将其映射到一个写入程序和多个读卡器应用程序,为了使其安全,我希望将该文件划分为多个扇区/区域。因此,当编写器将数据写入其专有区域时,读者可以创建视图,并从标记为可用的部分获取数据 写入程序输入新数据后,可用的扇区/区域应包括读卡器应用程序的新添加数据 文件大小从一开始就知道,因此不需要任何类型的动态内存操作,但它会很大,超过55GB,这意味着它太大,无法一次映射所有文件。数据写入速度非常快,就像每秒15个包,每个包大小为1.5MB 操作系统将是Win7 x64

我试图在SSD磁盘上创建一个文件,并将其映射到一个写入程序和多个读卡器应用程序,为了使其安全,我希望将该文件划分为多个扇区/区域。因此,当编写器将数据写入其专有区域时,读者可以创建视图,并从标记为可用的部分获取数据

写入程序输入新数据后,可用的扇区/区域应包括读卡器应用程序的新添加数据

文件大小从一开始就知道,因此不需要任何类型的动态内存操作,但它会很大,超过55GB,这意味着它太大,无法一次映射所有文件。数据写入速度非常快,就像每秒15个包,每个包大小为1.5MB

操作系统将是Win7 x64


有没有可能实行这种机制?我在互联网上找不到任何示例、教程或任何类型的文档,他们只给出了创建文件和创建视图等简单示例。。。我需要知道如何实现这样的指针操作,将文件划分为多个扇区,并将部分从“保留”更改为“用于写入”和“可用于读取”。我对C++语言

不太熟悉,没有内存映射文件API。你需要在自己的上面添加这样的逻辑。但是,您需要从文件中创建和发布不同的视图,而不是实现这样的指针操作。你确定这是你需要的吗。为什么所有数据都需要在一个文件中?通常,内存映射文件的速度相对较慢,因为它们具有分页机制。您将要在此基础上创建一个额外的视图-如果您只使用文件并读取内存中的包,可能会更好。您只需打开文件即可创建一个视图。操作系统还提供了一些锁定原语,用于锁定整个文件或一系列字节。如果他们不做你需要的,那么你需要建立自己的。如果只需要在应用程序处于活动状态时强制执行锁,则可以完全在内存中执行某些操作;如果它们需要持久化,就需要在磁盘上。您的一致性要求是什么?简而言之,你已经给出了一个很高的要求,你还需要做一些工作来充实你的需求,并将它们映射到操作系统原语上。在这种情况下,我认为更简单的方法是创建几个内存映射文件,这些文件可以命名,因此你可以创建任意数量的文件,客户机决定哪一个对应于它们是的,我认为是这样。一个提示-由于这是windows操作系统,请确保文件布局中每个目录包含的文件不超过512个,如果需要,请在子目录中布局这些文件-否则,您将发现如果同一目录中有很多文件,windows的速度会有多慢。我选择内存映射文件是因为性能优势?有没有更快的办法?我正在考虑在文件中实现一个循环缓冲区,并从该缓冲区执行写入和读取操作。那么,是否有可能采用这种方式或任何其他特定/具体的解决方案,请。。。