基本上,我試圖用 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))
}
- 1 回答
- 0 關注
- 255 瀏覽
添加回答
舉報
0/150
提交
取消