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

从 Go 代码修改 C void* 字节数组

从 Go 代码修改 C void* 字节数组

Go
冉冉说 2021-08-16 18:10:21
基本上,我试图用 Go 函数替换 C 程序中的 pread。我已经让大部分结构正常工作,但我不知道如何用所需的字节填充缓冲区参数 (buf unsafe.Pointer)。daemon.c 的一部分:static int preadShim(int fd, void *buf, size_t count, off_t offset) {    //return pread(fd, buf, count, offset);    return ReadOver(fd, buf, count, offset);}在 Golang 文件中:package mainimport "C"import "fmt"import "unsafe"//export ReadOverfunc ReadOver(fd C.int, buf unsafe.Pointer, count C.int, offset C.int) C.int{    fmt.Println("ReadOver got called")      newBuf := []byte("injected bytes")    //TODO: copy newBuf over buf    return count}另一个 Golang 文件:package main// #include "daemon.c"import "C"import "fmt"func main() {    //Start C program    C.start()}有什么建议么?我什么都没试过,我的想法都没有了。
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您只需要从中创建自己的切片,例如:


func ReadOver(fd C.int, buf unsafe.Pointer, count C.int, offset C.int) C.int {

    fmt.Println("ReadOver got called")

    newBuf := []byte("injected bytes")

    slice := &reflect.SliceHeader{Data: uintptr(buf), Len: int(count), Cap: int(count)}

    rbuf := *(*[]byte)(unsafe.Pointer(slice))

    return C.int(copy(rbuf, newBuf))

}


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

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