1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
snippet memfd
func newMemFd(data []byte) (*io.File, error) {
fd, err := unix.MemfdCreate("memfd", 0)
if err != nil {
return nil, err
}
if err := unix.Ftruncate(fd, int64(len(data))); err != nil {
return nil, err
}
var mem []byte
mem, err = unix.Mmap(fd, 0, len(data), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)
if err != nil {
return nil, err
}
copy(mem, data)
if err := unix.Munmap(mem); err != nil {
return nil, err
}
return os.NewFile(uintptr(fd), fmt.Sprintf("/proc/self/fd/%d", fd)), nil
}
|