Go Windows 将 Flag 传递给内存映射系统调用
Go Windows to pass Flag to memory map syscall
在 Unix 中,Go 可以这样做:
// func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error)
syscall.Mmap(., ., ., ., syscall.MAP_SHARED|syscall.XXX)
在Windows中,你可以这样使用:
https://github.com/golang/go/blob/master/src/syscall/zsyscall_windows.go#L970-L981
// func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error)
syscall.CreateFileMapping(., ., syscall.PAGE_READONLY, ., ., nil)
但是我没有看到 Windows 的 CreateFileMapping
的任何标志参数。
有人知道如何将标志传递给 CreateFileMapping
函数,例如 syscall.MAP_SHARED|syscall.XXX
吗?
您似乎可以从 the Windows reference for that syscall 中获取保护标志的整数值。似乎没有与 Unix-y 标志的一对一映射,例如当您传递文件名调用时,您似乎默认获得共享地图,而不是为共享地图设置标志。
在 Unix 中,Go 可以这样做:
// func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error)
syscall.Mmap(., ., ., ., syscall.MAP_SHARED|syscall.XXX)
在Windows中,你可以这样使用:
https://github.com/golang/go/blob/master/src/syscall/zsyscall_windows.go#L970-L981
// func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error)
syscall.CreateFileMapping(., ., syscall.PAGE_READONLY, ., ., nil)
但是我没有看到 Windows 的 CreateFileMapping
的任何标志参数。
有人知道如何将标志传递给 CreateFileMapping
函数,例如 syscall.MAP_SHARED|syscall.XXX
吗?
您似乎可以从 the Windows reference for that syscall 中获取保护标志的整数值。似乎没有与 Unix-y 标志的一对一映射,例如当您传递文件名调用时,您似乎默认获得共享地图,而不是为共享地图设置标志。