这是尝试mmap
一个文件并写一个字节:
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
file, _ := os.Open("/tmp/data")
mmap, _ := syscall.Mmap(int(file.Fd()), 0, 100, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED)
fmt.Printf("cap is %d", cap(mmap))
mmap[0] = 0
syscall.Munmap(mmap)
}
尽管长度设置为100,但mmap
容量始终为0.系统调用出了什么问题?
答案 0 :(得分:10)
始终检查错误!
os.Open
打开一个文件只读,但mmap
调用要求映射文件读/写,从而给出权限被拒绝错误,因此映射区域大小为0。
答案 1 :(得分:-1)
文件/tmp/data
是否为空?如果是这样的话:
我认为您无法将length
参数(在您的情况下为100)传递给Mmap
。我认为这个参数必须是< = file.Size()
,即fd引用的文件大小。如果是这种情况,请尝试将您的数据文件设置为非空,然后重试。