gpt4 book ai didi

linux - 快速关闭 mmap 丢弃未刷新的更改

转载 作者:太空狗 更新时间:2023-10-29 11:18:26 28 4
gpt4 key购买 nike

我正在使用 mmap 编辑的文件作为虚拟内存区域 - 该文件是手动分配的,因为我想控制它的位置。在 munmap 上,缓冲区的所有当前内容都刷新到文件中,但我并不真正需要文件内容。是否可以简单地丢弃 mmap 区域而不回写?

特定于 Linux 的解决方案是可以的。

我的意思是类似

char* myswaparea = "/tmp/myswaparea";
int64_t len = 1LL << 30;
fd = open(myswaparea, O_CREAT|O_RDWR, 0600);
ftruncate(fd, len);
void* arena = mmap(NULL, len, .... fd ...);
/* use arena */
munmap(arena, len); /* here comes an unnecessary flush */
close(fd);
unlink(myswaparea);

最佳答案

如果您不需要/不想将更改写回文件,只需使用 MAP_PRIVATE创建 map 时标记(mmap(2) 的第 4 个参数)。

来自手册页:

MAP_PRIVATE

Create a private copy-on-write mapping. Updates to the mapping are not visible to other processes mapping the same file, and are not carried through to the underlying file. It is unspecified whether changes made to the file after the mmap() call are visible in the mapped region.

示例

fd = open("myfile", O_RDWR);
if (fd < 0) {
/* Handle error... */
}
void *ptr;
size_t len = 1024;
ptr = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (ptr == MAP_FAILED) {
/* Handle error... */
}
/* ... */
if (munmap(ptr, len) < 0) {
/* Handle error... */
}

关于linux - 快速关闭 mmap 丢弃未刷新的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com