Mmap文件,并确保不更改内存

时间:2019-08-05 15:08:00

标签: mmap flock

我想映射一个文件。我只会从内存中读取。但是我必须确保在任何情况下都不会看到文件的任何更改,即,一旦读取内存在后续读取中将具有相同的内容。可以,但是如果我的程序以定义的方式失败(如果文件发生了更改),例如在读取时获得SEGF信号。

我想将一个大文件映射到内存中,而不是将其复制到新分配的内存中。但是,当映射的内存同时更改到我的程序时(例如,在我的程序运行时b / c有人更改了文件,并且更改已传播到映射的内存中),我的程序可能会无提示地输出错误的结果。在任何情况下都必须避免这种情况!有没有一种方法可以确保不更改mmaped文件,或者在发生更改时以定义的方式终止我的程序?最佳:一种可移植的方式,可以在Linux,Windows和Mac上运行?

我不能将mmap与MMAP_PRIVATE一起使用,因为联机帮助页上说:“未确定在映射区域中是否可以看到在调用mmap()之后对该文件所做的更改。”

我不能使用flock()锁定文件,因为flock()仅是建议性的操作,例如,仍可以通过不尝试获取该锁的程序来修改文件。

预期结果:函数

void* safe_mmap_readonly(int fd, size_t ofs, size_t length)

返回一个指向长度字节的指针,该长度是从文件fd中的ofs读取的。   假设指向的区域仅由程序读取,   随后对同一地址的读取必须始终返回相同的值。

不得从此过程外部更改基础文件   直到对该区域调用munmap()为止都是可能的

OR

从此过程之外更改基础文件时,   该过程可能会发出信号(SEGF或其他合适的信号?)   立即或读取映射的内存。但是在任何情况下都不能   后续对映射内存中地址的读取将返回不同的   比先前读取的值更有价值。

0 个答案:

没有答案