为了账号安全,请及时绑定邮箱和手机立即绑定

mmap 缓冲区到文件句柄

mmap 缓冲区到文件句柄

Go
大话西游666 2021-07-06 17:35:42
我需要“伪造”一个文件描述符(支持fstat),我就是这样做的。func ScanBytes(b []byte) error {  size := C.size_t(len(b))  path := C.CString("/bytes")  fd := C.shm_open(path, C.O_RDWR|C.O_CREAT, C.mode_t(0600))  defer C.shm_unlink(path)  defer C.close(fd)  res := C.ftruncate(fd, C.__off_t(size))  if res != 0 {    return fmt.Errorf("could not allocate shared memory region (%d)", res)  }  var addr = unsafe.Pointer(&b[0])  C.mmap(addr, size, C.PROT_READ|C.PROT_WRITE, C.MAP_SHARED|C.MAP_FIXED, fd, 0)  defer C.munmap(addr, size)  // _, err := syscall.Write(int(fd), b)  return doSomethingWith(fd)}您会看到对文件句柄的写入被注释掉的位置。如果我不将缓冲区写入分配的区域,则它是空的。我希望mmap与 withMAP_FIXED一起使用提供的缓冲区的地址,从而将内容映射到该区域。我猜write调用会复制,从而使内存使用量增加一倍。我真的必须这样做write吗?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信