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

基本上,我试图用 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 main


import "C"

import "fmt"

import "unsafe"


//export ReadOver

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")

    //TODO: copy newBuf over buf

    return count

}

另一个 Golang 文件:


package main


// #include "daemon.c"

import "C"

import "fmt"


func main() {

    //Start C program

    C.start()

}

有什么建议么?我什么都没试过,我的想法都没有了。


冉冉说
浏览 229回答 1
1回答

慕码人2483693

您只需要从中创建自己的切片,例如: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))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go