在Go中读取不断增长的mmap文件

我想在golang中读取mmap文件。</ p>

另一个过程是 </ p>

我正在使用</ p>

 syscall。Mmap(fd int,offset int64,  length int,prot int,flags int)
</ code> </ pre>

这将返回字节数组。</ p>

我是否需要继续做 syscall.Mmap </ code>读取更新的mmap? 有更好的方法吗?</ p>
</ div>

展开原文

原文

I want to read a mmap file in golang.

Another process is writing things into it so its size is growing while reading.

I am using

syscall.Mmap(fd int, offset int64, length int, prot int, flags int)

which will return a byte array.

Do I need to keep doing syscall.Mmap to read the updated mmap? Any better way?

duanqianmou4661
duanqianmou4661 哦,那是我的错,不了解MAP_SHARED,谢谢您提供的信息。
大约 2 年之前 回复
dsgdhf5674
dsgdhf5674 MAP_SHARED允许进程之间共享。从mmap手册页:映射的更新对于映射同一区域的其他进程可见
大约 2 年之前 回复
dongweiben5229
dongweiben5229 另一个进程正在写入您的进程的虚拟内存吗?通常这是不可能的。我认为您误会了mmapsyscall的功能。
大约 2 年之前 回复

1个回答



syscall.Mmap()</ code>只是C mmap(2)上的一个薄包装 代码>,因此其行为相同。 如果您使用了 syscall.MAP_SHARED </ code>标志(其他进程也这样做),则其他进程可以更新您返回的内存区域。 除了记住完成后调用 syscall.Munmap()</ code>之外,您无需执行任何其他操作。 </ p>

但是,如果有人正在写入共享空间并将其扩展到超过 您映射的区域,那么您将不得不再次映射它。 它不会自动调整自身大小。</ p>
</ div>

展开原文

原文

syscall.Mmap() is just a thin wrapper over C mmap(2) so it will behave the same. The memory region you get back can be updated by other processes if you've used the syscall.MAP_SHARED flag (and the other process did too). You don't have to do anything else except remember to call syscall.Munmap() when you're finished. It's probably a good candidate for defering, depending on what you're doing.

But, if someone is writing to the shared space and growing it beyond the region you mapped, then you'll have to map it again. It doesn't resize itself automatically.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐