写入文件的原始磁盘扇区
Writing to a files raw disk sectors
我正在操作系统可移植数据库服务器上工作,我想知道在不锁定整个文件的情况下读/写索引文件磁盘扇区的最佳方法是什么。我的数据库磁盘管理器有一个位图,可以跟踪索引文件中所有已使用/未使用的扇区的位置。此外,有没有一种操作系统可移植的方式来做到这一点?
读取/写入索引文件磁盘扇区,而不锁定整个文件。
您可以只锁定正在写入的部分(文件)。在Windows下,这将使用LockFile完成。顺便说一句,为什么不锁定整个文件很重要?无论如何,您的服务器都可以独占访问它,并且它可以在内部管理锁定(除非您想要一个无服务器/嵌入式数据库,同时仍允许多个客户端连接到它)。
为了实现事务持久性,您还需要确保写入的数据不会在缓存/缓冲区中滞留,并且在正确的时间物理写入磁盘。在Windows下,考虑将FILE_FLAG_WRITE_TROUGH(可能还有FILE_FLAG-NO_BUFFERING,假设您自己进行缓存管理)传递给CreateFile。
我不认为有任何独立于操作系统的API可以实现这一点——你需要在每个支持的操作系统下以一种特殊的方式来实现。当然,没有什么可以阻止您封装特定于操作系统的代码,并向系统的其他部分提供统一的接口。
相关文章:
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 矢量和其他容器如何在磁盘上工作?
- Eclipse工作区磁盘的大小只会增长
- 如何使用ATA命令读取磁盘的特定扇区
- 获得有关硬盘扇区中原始数据更改的通知-文件更改通知
- 如何以编程方式使用 MBR 和 USB 闪存扇区
- 写入文件的原始磁盘扇区
- 找到一个位于扇区内部的点
- 如何使用 SDL 2 和 C++ 绘制椭圆的填充扇区
- CFile将如何处理坏扇区
- 原始读取带有 fstream 的引导扇区
- C++将数据写入随机HDD扇区
- 使用哪个小部件将硬盘扇区显示为十六进制
- 在Linux上用c++读取硬盘扇区
- ReadFile FILE_FLAG_NO_BUFFERING如何读取两个扇区之间的数据
- 写入文件失败,错误码为87,每个扇区磁盘4096字节
- DeviceIoControl返回意外的物理扇区大小
- 如何在CD或DVD上获得扇区的准确位置和角度(数据位置测量)