testSuite/cmd/mmap_windows.go (29 lines of code) (raw):

package cmd import ( "os" "syscall" "unsafe" ) type MMF []byte func NewMMF(file *os.File, writable bool, offset int64, length int64) (MMF, error) { prot, access := uint32(syscall.PAGE_READONLY), uint32(syscall.FILE_MAP_READ) // Assume read-only if writable { prot, access = uint32(syscall.PAGE_READWRITE), uint32(syscall.FILE_MAP_WRITE) } hMMF, errno := syscall.CreateFileMapping(syscall.Handle(file.Fd()), nil, prot, uint32(int64(length)>>32), uint32(int64(length)&0xffffffff), nil) if hMMF == 0 { return nil, os.NewSyscallError("CreateFileMapping", errno) } defer syscall.CloseHandle(hMMF) //nolint:errcheck addr, _ := syscall.MapViewOfFile(hMMF, access, uint32(offset>>32), uint32(offset&0xffffffff), uintptr(length)) m := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(length)) return m, nil } func (m *MMF) Unmap() { addr := uintptr(unsafe.Pointer(&(([]byte)(*m)[0]))) *m = MMF{} err := syscall.UnmapViewOfFile(addr) if err != nil { panic(err) } }