1

这是对文件的尝试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。系统调用出了什么问题?

4

2 回答 2

10

经常检查错误!

os.Open打开一个只读文件,但是mmap调用要求将文件映射为读/写,从而给出权限被拒绝错误,结果映射区域大小为 0。

于 2013-05-17T12:21:02.233 回答
-1

文件是/tmp/data空的吗?如果是这样:

我认为您不能将任意length参数(例如 100 在您的情况下)传递给Mmap. 我觉得这个参数一定是<= file.Size(),即fd所引用的文件的大小。如果是这种情况,请尝试使您的数据文件非空,然后重试。

于 2013-05-17T12:20:18.747 回答